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

Нужно разобрать код хода коня на шахматной доске - C++

Восстановить пароль Регистрация
 
DaddySam22
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 9
28.12.2015, 16:22     Нужно разобрать код хода коня на шахматной доске #1
Есть задча: На шахматной доске NxN в клетке (x1, y1) стоит голодный шахматный конь. Он хочет попасть в клетку (x2, y2), где растет вкусная шахматная трава. Какое наименьшее количество ходов он должен для этого сделать?

Входные данные
На вход программы поступает пять чисел: N, x1, y1, x2, y2 (5 <= N <= 20, 1 <= x1, y1, x2, y2 <= N). Левая верхняя клетка доски имеет координаты (1, 1), правая нижняя - (N, N).

Выходные данные
В первой строке выведите единственное число K - наименьшее необходимое число ходов коня. В каждой из следующих K+1 строк должно быть записано 2 числа - координаты очередной клетки в пути коня.

Помогите разобрать найденный код,если можно,то описание того, что происходит в каждой строке

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
#include <iostream>
using namespace std;
 
typedef struct {int x; int y; int p;} step;
 
void show(step *sts, int i) {
    if (i>0) {show(sts, sts[i].p); cout<<sts[i].x<<" "<<sts[i].y<<'\n';}}
 
int main() {
    const int N=20, dx[]={1,2,2,1,-1,-2,-2,-1}, dy[]={2,1,-1,-2,-2,-1,1,2};
    int w[N+1][N+1]={0,}, b=0, e=0, isolve=0, added=0, cnt=0;   
    step sts[N*N]; sts->p=-1; 
    int n, x2, y2; cin >> n >> sts->x >> sts->y >> x2 >> y2;
   
    do {added=0; int ic=e+1;
        for (int i=b; i<=e && !isolve; ++i)
        for (int j=0; j<8; ++j) {
            int x = sts[i].x + dx[j], y = sts[i].y + dy[j];
            if (x<1 || y<1 || x>n || y>n || w[x][y]) continue;
            
            w[x][y]++; added=1;
            step *s=sts+(ic++); s->x=x; s->y=y; s->p=i;
            if (x==x2 && y==y2) {isolve=ic-1; break;}
        }
        cnt++; b=e+1; e=ic-1;
    } while (!isolve && added);
    
    if (isolve) cout<<cnt<<'\n'; else cout<<"no solutions\n";
    show(sts, isolve);
}
Добавлено через 21 час 40 минут
Люди,помогите,очень срочно надо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2015, 16:22     Нужно разобрать код хода коня на шахматной доске
Посмотрите здесь:

на шахматной доске заданы 2 клетки соедините эти 2 клетки кратчайшим путем коня C++
C++ Числа на шахматной доске в С++
Числа на шахматной доске C++
C++ Числа на шахматной доске
C++ Ход коня по шахматной доске случайным образом
Ход на шахматной доске C++
Движение по шахматной доске коня (с левого нижнего угла в верхний правый угол) C++
C++ Геометрическая прогрессия на шахматной доске

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

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

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru