我一直在尝试用 java 创建迷宫求解算法。我尝试通过回溯递归来做到这一点。这是我的代码:
public static boolean solver(String[][] maze, int i, int j){
display(maze);//prints maze
System.out.println();
maze[i][j] = "*";
if(maze[i][j+1] == "E" || maze[i][j-1] == "E" || maze[i+1][j] == "E" || maze[i-1][j] == "E")
display(maze);
else if(maze[i][j+1] != " " && maze[i][j-1] != " " && maze[i+1][j] != " " && maze[i-1][j] != " "){
maze[i][j] = " ";
return false;
}
if(maze[i][j+1] == " ")
if(!solver(maze,i,j+1))
maze[i][j] = " ";
if(maze[i][j-1] == " ")
if(!solver(maze,i,j-1))
maze[i][j] = " ";
if(maze[i+1][j] == " ")
if(!solver(maze,i+1,j))
maze[i][j] = " ";
if(maze[i-1][j] == " ")
if(!solver(maze,i-1,j))
maze[i][j] = " ";
return true;
}
这是主要方法:
String[][] maze = {{"#","S","#","#","#","#","#","#","#","#","#","#","#"},
{"#"," "," "," "," "," ","#"," "," "," "," "," ","#"},
{"#"," ","#","#","#","#","#"," ","#","#","#"," ","#"},
{"#"," "," "," "," "," ","#"," ","#"," ","#"," ","#"},
{"#"," ","#","#","#"," ","#"," ","#"," ","#"," ","#"},
{"#"," "," "," ","#"," ","#"," "," "," ","#"," ","#"},
{"#"," "," "," ","#"," ","#"," "," "," ","#"," ","#"},
{"#"," ","#"," ","#"," "," "," "," "," "," "," ","#"},
{"#","#","#"," ","#","#","#","#","#","#","#","#","#"},
{"#"," "," "," ","#"," "," "," "," "," "," "," ","#"},
{"#"," ","#","#","#"," ","#","#","#","#","#"," ","#"},
{"#"," "," "," "," "," ","#"," "," "," "," "," ","#"},
{"#","#","#","#","#","#","#","#","#","#","#","E","#"}};
solver(maze,1,1);
这个算法可以解决迷宫,但是这段代码中有一个错误,我无法解决这个错误。
输出:
#S###########
#*****# #
# ##### ### #
# # # # #
# ### # # # #
# # # # #
# # # # #
# # # #
### #########
# # #
# ### ##### #
# # #
###########E#
#S###########
#*** # #
#*##### ### #
# # # # #
# ### # # # #
# # # # #
# # # # #
# # # #
### #########
# # #
# ### ##### #
# # #
###########E#
正如您所看到的,它是这样来的,但是在返回时它没有正确删除星星。
如何解决这个错误?
最佳答案
也许它有助于从“迷宫”的具体表示中抽象出来,并将(完美)迷宫视为二维网格上无向图的生成树。然后您只需在该网格上实现您喜欢的任何寻路算法即可。 “解决”迷宫只是在网格边界上的两个顶点之间找到一条路径。
我已经基于图论 View 实现了许多迷宫生成和寻路算法,您可以在这里找到我的代码和演示应用程序:
关于java - 如何从迷宫求解算法中的错误路径返回? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694930/