我已经不知所措了。我的一项家庭作业问题要求我采用仅由1和0组成的2D数组,然后“仅使用递归来找到出口 ”。但是,关于终点的定义很少给定示例,我假设这意味着我们需要找到从另一端(也由一个代表)的任何开口到阵列边缘(由一个代表)的直接路径。
我已经尝试了好几个小时才能弄清楚这一点,但是我只遇到令人沮丧的模糊的StackOverflowError和其他错误消息,这些消息告诉我什么我做错了什么。
我的(可怕的,混乱的)代码如下:
public void checkForExitPath(int r, int c)
{
if(inBounds(r,c) && maze[r][c] == 1)
{
maze[r][c] = 9;
if(r == maze.length && c == maze[0].length)
{
exitFound = true;
System.out.println("Yay! Exit found!");
}
else
{
if(inBounds(r+1, c)) checkForExitPath(r+1, c);
if(inBounds(r, c+1)) checkForExitPath(r, c+1);
if(inBounds(r-1, c)) checkForExitPath(r-1, c);
if(inBounds(r, c-1)) checkForExitPath(r, c-1);
}
}
else
{
if(inBounds(r+1, c)) checkForExitPath(r+1, c);
if(inBounds(r, c+1)) checkForExitPath(r, c+1);
if(inBounds(r-1, c)) checkForExitPath(r-1, c);
if(inBounds(r, c-1)) checkForExitPath(r, c-1);
}
}
private boolean inBounds(int r, int c)
{
return (((r >= 0) && (r < maze.length)) && ((c >= 0) && (c < maze.length)));
}
这总是导致以下结果:
Exception in thread "main" java.lang.StackOverflowError
at Maze.checkForExitPath(Maze.java:47)
at Maze.checkForExitPath(Maze.java:67)
at Maze.checkForExitPath(Maze.java:65)
at Maze.checkForExitPath(Maze.java:67)
at Maze.checkForExitPath(Maze.java:65)
at Maze.checkForExitPath(Maze.java:67)
at Maze.checkForExitPath(Maze.java:65)
然后不断。令人沮丧的是,关于到底什么地方出了问题的信息很少。
需要解决的二维数组如下:
1 0 0 0 1
1 1 1 1 0
0 0 1 0 1
0 1 1 1 0
0 0 0 0 1
(此数组显然没有出口)
1 0 0 0 0 1 1
1 1 1 1 0 1 0
0 0 1 0 0 1 0
0 1 1 1 0 1 0
0 1 0 1 0 1 0
0 1 0 1 1 1 0
0 1 0 1 0 0 1
(此数组有一个出口)
1 0 0 0 0 1 0
1 1 1 1 0 1 0
0 0 1 0 0 1 0
0 1 1 1 0 1 0
0 1 0 1 0 1 0
0 1 0 1 1 1 0
0 1 0 1 0 1 0
(没有出口)
1 0 1 1 0 1 0
1 1 1 1 1 1 0
0 0 1 0 0 0 1
0 1 1 1 1 1 1
0 1 0 1 0 1 0
1 1 1 1 1 1 0
0 1 0 1 0 1 0
(有出口)
我很沮丧。很沮丧。而且我恐怕无法弄清楚。解决方案可能刚刚浮出水面,我只需要帮助就可以解决。谢谢。