Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mendow
1 / 1 / 0
Регистрация: 31.07.2013
Сообщений: 13
#1

Напрваить на верный путь. Задача :тур конем - C++

01.02.2014, 17:39. Просмотров 245. Ответов 0
Метки нет (Все метки)

Здравствуйте. Знаю что задача стара и решений уже очень очень много. Но я бы хотел решить её как то своим путем. Алгоритм себе представлю как обход графа в глубь. Задаю точку и начинаю ходить на возможные точки.

Далее два варианта кода ,оба не верно работают .Прошу помощи у сообщества так как уже извел себе мозг.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// horse.cpp: главный файл проекта.
 
#include <stdio.h>
#include <conio.h>
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <time.h>
 
using namespace System;
using namespace std;
int cou=0;
int a=0,b=0;
bool place;
int x,y;
int z,t,d=0;
 
 
 
 
 
int out(int z,int t){
    
    if(z<0 || t<0 || z>7 || t>7){
        place=false;
    }
    else place=true;
    return place;
}
 
int main()
{
    struct point{
        int to[2];//с какой точки попало сюда
        int real[2];//deistvitelmnaya tochka
        int out[16];//vozmojnie hodi
    }qw[64],*point= &qw[0];
 
 
    
    
    const int strok=8;
    const int stolb=8;
    
    int mass[strok][stolb];
    for(int p=0;p<strok;p++){
        for(int o=0;o<stolb;o++){
            mass[p][o]=0;
        }
    }
    cin>>x>>y;
    out(x,y);    mass[y][x]=1;
    
    point[0].to[0]=point[0].real[0]=y;
    point[0].to[1]=point[0].real[1]=x;
 
    
    while(cou<64*64){
    
        if(b!=0){
        loop:
        int s=0;
            while( s<16){
                if(point[b-1].out[s]!=-1){
                    x=point[b].real[0]=point[b-1].out[s];
                    y=point[b].real[1]=point[b-1].out[s+1];
                    break;
                }
            s+=2;
            
            }if(s==16){
                point[b].out[s]=-1;
                point[b].out[s+1]=-1;
                b--;goto loop;}
    }
        
        
    if (out(point[b].real[0],point[b].real[1])==1 ){
            for( a=0;a<16;a+=2){
                
                int first=point[b].real[0];
                int second=point[b].real[1];
                switch (a){
                case 0:    
                        first=y-2;
                        second=x-1;
                        break;    
                case 2:
                        first=y-1;
                        second=x-2;
                        
                        break;
                case 4:
                        first=y+2;
                        second=x+1;
                        
                        break;
                case 6:
                        first=y-1;
                        second=x+2;
                        
                        break;
                case 8:
                        first=y+1;
                        second=x+2;
                        
                        break;
                case 10:
                        first=y-2;
                        second=x+1;
                        
                        break;
                case 12:
                        first=y+2;
                        second=x-1;
                        
                        break;
                case 14:    
                        first=y+1;
                        second=x-2;
                        
                        break;
                default :cout <<"OUT"<<endl;break;
                    
                
                }
                if (out(first,second)==1){
                            point[b].out[a]=first;
                            point[b].out[a+1]=second;
                            mass[first][second]=1;cou++;
                            cout<<"z="<<point[b].out[a]<<"_t="<<point[b].out[a+1]<<endl;
                            second=0;first=0;
                        }
                else{
                    point[b].out[a]=-1;point[b].out[a+1]=-1;
                }
 
            }
        }
        
    b++;for(int p=0;p<strok;p++){cout<<endl;
        for(int o=0;o<stolb;o++){
            cout<<setw(5)<<mass[p][o];
        }
    }
    }
 
    for(int a=0;a<16;a+=2){
        cout<<"z="<<point[0].out[a]<<"_t="<<point[0].out[a+1]<<endl;
    }
 
    for(int p=0;p<strok;p++){cout<<endl;
        for(int o=0;o<stolb;o++){
            cout<<setw(5)<<mass[p][o];
        }
    }
 
    system ("PAUSE");
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// horse1.cpp: главный файл проекта.
#include <stdio.h>
#include <conio.h>
#include "stdafx.h"
#include <iostream>
#include <iomanip>
 
using namespace System;
using namespace std;
 
bool place;
int x,y,a,b,c,r=0;
int mass[8][8];
 
int out(int z,int t){
    
    if(z<0 || t<0 || z>7 || t>7){
        place=false;
    }
    else place=true;
    return place;
}
 
 
int main()
{
    cin>>x>>y;
    
    struct point{
        int to[2];//с какой точки попало сюда
        int real[2];//deistvitelmnaya tochka
        int out[16];//vozmojnie hodi
    }qw[64],*point= &qw[0];
 
    point[0].real[0]=x;point[0].real[1]=y;
 
    while( c<64){
         for( a=0;a<16;a+=2){
             r++;
                if(point[c].out[a]!=1){
                    int first=x=point[c].real[0];
                    int second=y=point[c].real[1];
                    switch (a){
                        case 0:    
                                first=y-2;second=x-1;break;
                        case 2:
                                first=y-1;second=x-2;break;
                        case 4:
                                first=y+2;second=x+1;break;
                        case 6:
                                first=y-1;second=x+2;break;
                        case 8:
                                first=y+1;second=x+2;break;
                        case 10:
                                first=y-2;second=x+1;break;
                        case 12:
                                first=y+2;second=x-1;break;
                        case 14:    
                                first=y+1;second=x-2;break;
                        default :cout <<"OUT"<<endl;break;
                    }
                    if (out(first,second)==1){
                                point[c].out[0]=first;
                                point[c].out[1]=second;
                                point[c+1].real[0]=first;
                                point[c+1].real[1]=second;
                                mass[first][second]=1;c++;
                                second=0;first=0;break;
                            }
                    else{
                        point[c].out[a]=-1;point[c].out[a+1]=-1;
                    }
                }
         }if(r==8){c--;}
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2014, 17:39     Напрваить на верный путь. Задача :тур конем
Посмотрите здесь:

Задача "Тур конем" - C++
На шахматной доске размером на поле с координатами х0, у0 находится конь – фигура, перемещающаяся по обычным шахматным правилам. Задача...

Направьте на верный путь - C++
&quot;Дана символьная матрица размера 4 х 5. Из последовательности её строк сформировать новую строку и определить ее длину. Проверить наличие...

Наведите на верный путь - C++
Требуется написать программу: 1) ПКМ по МР3 файлу, далее открыть с помощью, а там моя программа 2) Программа считывает ID3Tag...

Направьте меня на верный путь... - C++
У меня задача: Дана символьная матрица размера 4 х 5. Из последовательности её строк сформировать новую строку и определить ее длину....

Просчитать путь прохождение конем шахматной доски (с использованием эвристики доступности) - C++
Изучаю с++, наткнулся в учебнике на задачу - просчитать путь прохождение конем шахматной доски + для хардкорности использовать эвристику...

Задача Ход конем - 2. - C++
день добрый. задача: http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=656&amp;chapterid=2962#1 как видите, задача на тему...

Задача про минимальный путь в лабиринте. - C++
Вот собственно сама задача: Разработать программу, которая ищет минимальный путь в лабиринте. Лабиринт представляет собой матрицу...

Структура «Автобусный тур» - C++
Структура «Автобусный тур» с полями «пункт назначения», «дата начала тура», «дата окончания тура», «количество человек в группе». Функция...

Создание класса (создать класс информационной системы тур агенства) - C++
Помогите пожалуйста. Нужно создать класс информационной системы тур агенства, который будет считывать информацию из файла и проводить поиск...

Ход конем - C++
На шахматной доске (8х8) стоят конь и пешка. Конь располагается на поле А, пешка - на поле B. Найти минимальное количество ходов, за...

Ход конем - C++
Совсем недавно Вася занялся программированием и решил реализовать собственную программу для игры в шахматы. Но у него возникла проблема...

Шаг конем - C++
просьба . помогите . ну вот я должен написать код обход коня по всей доске ,программа находит первую точку коня и его первые возможные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru