Lê Nguyễn thị hoa Ответов: 1

Самый короткий вопрос коня и пешки от 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

У вас есть вопрос, связанный с этим кодом ?

1 Ответов

Рейтинг:
0

Espen Harlinn

Google дал мне это:Задача шахматного рыцаря | найти кратчайший путь от источника к месту назначения[^]

Это довольно близко к тому, что вам нужно, так как вы знаете, где будет пешка через x шагов ...

С уважением
Эспен Харлинн