Ошибка StackOverFlow при попытке повторения через лабиринт - PullRequest
0 голосов
/ 18 октября 2019

Мне нужно пометить правильный путь в лабиринте ниже, используя рекурсию:

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) изначально передает координаты (x, y) буквы "S". Когда запускается 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) и перемещается в (51) увидев, что (6,1) и (7,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
...