如何找到仅由1和0组成的2D阵列迷宫的出口?

时间:2019-04-16 16:21:03

标签: java multidimensional-array

我已经不知所措了。我的一项家庭作业问题要求我采用仅由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

(有出口)

我很沮丧。很沮丧。而且我恐怕无法弄清楚。解决方案可能刚刚浮出水面,我只需要帮助就可以解决。谢谢。

0 个答案:

没有答案