我想從寬度優先搜索構建最短路徑。我已經在Java代碼中實現了BFS(如下所示),但是現在我不知道如何重建路徑以獲得實現代碼的最短路徑。BFS重建路徑以獲得最短路徑
雖然我知道我必須保留一組父母,但我不知道把它放在我的代碼中。基本上,我想從起點到目標點使用BFS追溯最短路徑。請注意,我正在使用二維數組。
我做得對嗎?有人可以幫助我嗎?
public ArrayList<Point> shortestPath=new ArrayList<>();
public ArrayList<Point> BFS(Point start, Point end){
int[][] distanceBoard=new int[50][50]; Point current,parent;
for(int i=0;i<distanceBoard.length;i++)
for(int j=0;j<distanceBoard.length;j++) distanceBoard[i][j]=Integer.MAX_VALUE;
distanceBoard[start.getX()][start.getY()]=0;
LinkedList<Point> q=new LinkedList<>();
q.addFirst(start);
while(!q.isEmpty()){
current=q.getFirst();
if((new Point(current.getX(),current.getY()))==end) return shortestPath;
q.removeFirst();
for(Point point:current.getNeighbours()){
if(distanceBoard[point.getX()][point.getY()]==Integer.MAX_VALUE){
distanceBoard[point.getX()][point.getY()]=distanceBoard[current.getX()][current.getY()]+1;
parent=current;
q.addLast(point);
}
shortestPath.add(current);
}
}return null;
}
有點困惑,我這樣做在相同的功能或在一個新的功能? – Amine
我編輯的帖子... while循環之後的相同函數 –