所以我现在一直试图创建一个功能齐全的迷宫游戏。我实现了使用DFS的迷宫生成算法,我还使用DFS实现了最短路径算法。现在我要做的是背诵你需要旅行的顶点,使用从起点到点B的最短路径。一想到它,我想回溯,我还没有实际实现过一个回溯所以现在我有点迷茫。这是我的代码,minB是一个数组,它保存从A点到迷宫上任何其他点的最短路径。我的逻辑是尝试在当前节点周围的所有4个方向上推送节点,如果两个节点之间的最短路径差是1,如果新单元不是墙,并且如果它不超出界限。然后,如果你到达B点,恭喜打印出积分。如果你到达了一个与A到B具有相同最短路径的点但是不是B然后回溯。好的,有问题,我不知道如何从列表中取出节点"点"因为什么阻止你回到这个配置?如果我的解释并不好说,我会尽力澄清。
static ArrayList<int[]> points = new ArrayList<int[]>();
public static void backtrack(int x, int y) {
if (maze[x][y] == 'B') {
for(int i=0;i<points.size();++i){
System.out.println(points.get(i)[0]+" "+points.get(i)[1]);
}
return;
} else if(minB[x][y]==minB[col-1][row-2]&&maze[x][y]!='B') {
/*DONT KNOW WHAT TO DO HERE*/
points.remove(points.size()-1);
return;
}else{
int[]point={x,y};
points.add(point);
for (int[] dirs : dir) {
int x1 = x + dirs[0];
int y1 = y + dirs[1];
if (x1 >= 0 && y1 >= 0 && y1 < row && x1 < col) {
if (maze[x1][y1] != '#') {
if(minB[x1][y1]-minB[x][y]==1){
backtrack(x1,y1);
}
}
}
}
}
}