Алгоритм лабиринта KINDA работает.Некоторые лабиринты, не все помогают - PullRequest
2 голосов
/ 23 сентября 2011

Я использую алгоритм лабиринта, который работает иногда, но не всегда.Он использует рекурсию, но я не могу понять, почему он не все время.

public boolean findPath(int x, int y) {
    myArray[x][y] = "T";    // marks coordinate T for traveled
    printMaze();  // prints the current state of the maze

    if (x == finish[0] && y == finish[1]) { // base case: if at finish, solved.
        isFinish = true;
        return isFinish;
    } else {
        isFinish = false;                   // not at finish
        for (int i = -1; i <= 1; i++) {
            for (int j = -1; j <= 1; j++) {
                if (i * j == 0 && i != j && canIGoHere(x+i, y+j) && !isFinish) {
                    isFinish = findPath(x + i, y + j);
                }
            }
        }
        return isFinish;
    }
}

1 Ответ

2 голосов
/ 23 сентября 2011

Я думаю, что функция должна вернуться, как только isFinish верен.Как и сейчас, функция может найти конечную позицию, но затем продолжает цикл и может отойти от этой позиции до возврата.

...