我需要使用递归在下面的迷宫中标记正确的路径:
WWWWWWWW
W....W.W
WW.WW..W
W....W.W
W.W.WW.E
S.W.WW.W
WW.....W
WWWWWWWW
每个“ W”是一堵墙,“ S”是起点,“ E”是终点,“。”。是程序可以采用的路径。我正在使用的递归方法 markCorrectPath(int r,int c) 最初传入“ S”的(x,y)坐标。 当markCorrectPath启动时,它最初用TEMP“ o”标记其路径。找到路径后,将“ o”替换为“ *”
这是我的代码:
//START = "S", EXIT = "E", TEMP = "o", PATH = "."
public boolean markTheCorrectPath(int r, int c)
{
if(r > maze.length - 1 || r < 0 || c > maze[0].length - 1 || c < 0)
return false;
if(maze[r][c] == EXIT)
return true;
if(maze[r][c] == WALL)
return false;
if(maze[r][c] != START)
maze[r][c] = TEMP;
if(markTheCorrectPath(r+1, c) == true)
return true;
if(markTheCorrectPath(r-1, c) == true)
return true;
if(markTheCorrectPath(r, c+1) == true)
return true;
if(markTheCorrectPath(r, c-1) == true)
return true;
maze[r][c] = PATH;
return false;
}
代码从(5,0)开始并在看到(6,1)和(7,1)不可行后移至(5,1)。但是,此后,它反复卡住(5,1),(6,1)和(4,1)。这是StackOverflow。
预期输出应该是这样的:
WWWWWWWW
W....W.W
WW.WW..W
W***.W.W
W*W*WW*E
S*W*WW*W
WW.****W
WWWWWWWW