尝试通过迷宫重现时出现StackOverFlow错误

时间:2019-10-17 23:41:50

标签: java recursion stack-overflow maze

我需要使用递归在下面的迷宫中标记正确的路径:

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

0 个答案:

没有答案