我正在创建一个旨在递归导航迷宫的程序。编码:
public static boolean traverse(int maze[][], coordinate start)
{
//recursion: traverse(maze, updated coordinates)
if(maze[start.y+1][start.x] == 2 || maze[start.y-1][start.x] == 2 || maze[start.y][start.x+1] == 2 || maze[start.y][start.x - 1] == 2)
{
display(maze);
System.out.println("DONE");
return true;
}
else
{
if(north(maze, start) == true)
{
maze[start.y-1][start.x] = 4;
display(maze);
coordinate temp = start;
temp.y--;
if (traverse(maze, temp) == false)
{
maze[start.y][start.x] = 3;
}
}
if(west(maze, start) == true)
{
maze[start.y][start.x-1] = 4;
display(maze);
coordinate temp = start;
temp.x--;
if (traverse(maze, temp) == false)
{
maze[start.y][start.x] = 3;
}
}
if(south(maze, start) == true)
{
maze[start.y+1][start.x] = 4;
display(maze);
coordinate temp = start;
temp.y++;
if (traverse(maze, temp) == false)
{
maze[start.y][start.x] = 3;
}
}
if(east(maze, start) == true)
{
maze[start.y][start.x+1] = 4;
display(maze);
coordinate temp = start;
temp.x++;
if (traverse(maze, temp) == false)
{
maze[start.y][start.x] = 3;
}
}
}
return false;
}
但是,每当我走到死胡同时,它都不会退缩。当我调试时,它表明当程序从递归或“回溯”返回时,我的起始值固定在我的死胡同。
例如:
1 1 1 1 1
1 4 4 4 1
1 9 1 4 1
1 1 1 4 1
1 4 4 4 1
1 4 1 0 1
1 4 1 0 1
1 1 1 2 1
9是我的起点。2是我的出口。4是我的路。1 代表墙壁。当我走到死胡同时(在本例中为第 7 行第 2 列)。我的位置将等于整个程序其余部分的死胡同。为什么?