Я работаю над решением для следующего вопроса «http://wcipeg.com/problems/desc/ccc10j5». В принципе, вам дается точка в 2D сетке (x, y). Вы должны найти кратчайший путь от начальной точки до конечной точки (которая также указана).Как реализовать BFS (вместо моего решения, используйте древовидную структуру)
Ограничения: Вы можете путешествовать только в форме «L» (как рыцарь в шахматах).
Хотя я смог его решить, люди говорили мне, что есть лучший способ его решить, используя древовидную структуру (или что-то еще). Может ли кто-нибудь помочь мне ускорить решение.
Вот мой код.
import java.util.Scanner;
public class oj{
static int steps = 0;
static int screen[][] = new int[9][9];
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x, y;
x = scan.nextInt();
y = scan.nextInt();
int endx = scan.nextInt();
int endy = scan.nextInt();
for(int i = 1; i <= 8; i++)
for(int j = 1; j <= 8; j++)
screen[i][j] = 99999;
doHop(x, y, 0);
System.out.println(screen[endx][endy]);
}
public static void doHop(int x, int y, int steps){
if(x > 0 && x <= 8 && y > 0 && y <= 8 && steps < screen[x][y]){
screen[x][y] = steps;
doHop (x - 1, y + 2, steps + 1);
doHop (x - 1, y - 2, steps + 1);
doHop (x + 1, y + 2, steps + 1);
doHop (x + 1, y - 2, steps + 1);
doHop (x - 2, y + 1, steps + 1);
doHop (x - 2, y - 1, steps + 1);
doHop (x + 2, y + 1, steps + 1);
doHop (x + 2, y - 1, steps + 1);
}
}
}
Заранее спасибо.
Пожалуйста, напишите здесь, чтобы уточнить вопрос, а не только ссылку. – amit
Посмотрите на алгоритм кратчайшего пути dykstras –
@amit обновил описание – BorisMediaProds