Самый короткий вопрос коня и пешки от BFS
[ПОМОЩЬ]
Шахматы имеют бесконечный размер, конь находится в Mx, My и может двигаться в 8 направлениях ( как правила шахмат), а пешка находится в Tx, Ty, но просто идет вверх (Tx, Ty -> Tx + 1, Ty) .
Вопрос : если конь движется первым, сколько шагов нам нужно сделать, чтобы конь съел пешку ?
Ссылка на вопрос : http://vn.spoj.com/problems/KANDP/
Я просто хочу знать, как использовать BFS, чтобы найти кратчайший путь от коня к пешке, когда они двигаются : (извините за мой английский, я Вьетнамская девушка ... только начало .. пожалуйста помочь
Что я уже пробовал:
int bfs1() { int bot1 = 1, top1 = 0; q1[++top1] = (Node) {mx, my}; cnt = 0; for ( ; ; ) { cnt++; int v = top1; for (int i = bot1; i <= v; i++) { Node t = q1[i]; if (t.y == ty ) { for (int j = 0; j < 4; j++) { int x = t.x + hx[j]; int y = t.y + hy[j]; if (x > 1000 or y > 1000 or x < 0 or y < 0) continue; if (d1[x][y] != cnt) { q1[++top1] = (Node) { t. x + hx[j], t.y + hy[j] }; d1[x][y] = cnt; } } } else if (t.y < ty ) { for (int j = 2; i < 4; j++) { int x = t.x + hx[j]; int y = t.y + hy[j]; if (x > 1000 or y > 1000 or x < 0 or y < 0) continue; if (d1[x][y] != cnt) { q1[++top1] = (Node) { t. x + hx[j], t.y + hy[j] }; d1[x][y] = cnt; } } } else for (int j = 0; j < 2; j++) { int x = t.x + hx[j]; int y = t.y + hy[j]; if (x > 1000 or y > 1000 or x < 0 or y < 0) continue; if (d1[x][y] != cnt) { q1[++top1] = (Node) { t. x + hx[j], t.y + hy[j] }; d1[x][y] = cnt; } } } if (d1[tx][ty] == cnt) return cnt; tx = tx + 1; d2[tx][ty] = cnt; } }
Patrice T
У вас есть вопрос, связанный с этим кодом ?