私は幅優先探索から最短経路を構築したいと考えています。私はJavaコードでBFSを実装しましたが(下図参照)、コードの実装から最短パスを得るためにパスを再構築する方法はわかりません。BFS最短経路を得るために経路を再構築
私は親の配列を保持しなければならないことは分かっていますが、私はどこにコードを入れるべきかわかりません。基本的には、スタートポイントからゴールポイントまでのBFSを使用して最短パスをトレースしたいと思います。私は2D配列を使用していることに注意してください。
正しくしていますか?誰かが私を助けてくれますか?
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ループの直後の同じ機能 –