Как мне найти выход из двухмерного массива, состоящего только из нулей и единиц? - PullRequest
0 голосов
/ 16 апреля 2019

Я в конце своего остроумия. Один из моих домашних заданий требует, чтобы я взял двумерный массив, состоящий только из единиц и нулей, а затем "нашел выход , используя только рекурсию. " Существует очень мало спецификаций относительно того, что является целью, однако примеры, я предполагаю, что это означает, что нам нужно найти прямой путь к краю массива (представленный единицей) из любого отверстия с другой стороны (также представленной единицей).

Я часами пытался это выяснить, однако меня встречали только удручающе расплывчатые 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)

И так далее, и так далее. Существует крайне скудная информация о том, что именно идет не так.

2D-массивы, которые необходимо решить, выглядят так:

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

(есть выход)

Я расстроен. Очень расстроен. И я боюсь, что я не могу понять это. Решение, вероятно, летит прямо над моей головой, мне просто нужна помощь, чтобы достичь его. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...