Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在迷宫求解算法中,如何从错误路径返回?(爪哇)_Java_Recursion_Backtracking - Fatal编程技术网

Java 在迷宫求解算法中,如何从错误路径返回?(爪哇)

Java 在迷宫求解算法中,如何从错误路径返回?(爪哇),java,recursion,backtracking,Java,Recursion,Backtracking,我一直在尝试用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]

我一直在尝试用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);
这个算法可以解决一个迷宫,但是代码中有一个bug,我无法解决这个bug

输出:

#S###########
#*****#     #
# ##### ### #
#     # # # #
# ### # # # #
#   # #   # #
#   # #   # #
# # #       #
### #########
#   #       #
# ### ##### #
#     #     #
###########E#

#S###########
#***  #     #
#*##### ### #
#     # # # #
# ### # # # #
#   # #   # #
#   # #   # #
# # #       #
### #########
#   #       #
# ### ##### #
#     #     #
###########E#
正如你所看到的,它是这样来的,但返回时并不能正确地移除星星


如何解决这个bug?

< P>也许有助于从“迷宫”的具体表示中抽象出来,并将一个(完美)迷宫看作是二维网格上的无向图的生成树。然后你只需要在网格上实现你喜欢的任何寻路算法。“解决”迷宫只是在网格边界上的两个顶点之间找到一条路径

我已经基于这个图论视图实现了许多迷宫生成和寻路算法,您可以在这里找到我的代码和演示应用程序:


请阅读:这是否回答了您的问题?欢迎使用StackOverflow,如果需要了解答案,请添加更多说明和代码,因为它将尽快解决其他人的问题。