java - 行列迷宫递归错误

标签 java recursion stack-overflow backtracking maze

我得到的代码包含构建迷宫所需的一切。我的工作是写makeMove用于解决迷宫问题的方法。 这是我到目前为止所拥有的:

protected void makeMove( int row, int col )
{
    int MAX_ROWS = maze.length;
    int MAX_COLS = maze.length;
    boolean found = false;
    boolean[][]visited = new boolean[MAX_ROWS][MAX_COLS];
    //visited[startRow][startCol] = true;
    if (row < 0 || row >= MAX_ROWS  || col < 0 || col >= MAX_COLS  || visited[row][col] || maze[row][col] == 1)
        return;

    visited[row][col] = true;
    found = row == endRow && col == endCol;

    /*if(row == endRow && col == endCol) {
        found = true;
    }*/
    if(!found && maze[row][col - 1]!=1 && !visited[row][col]) { // move left
        makeMove(row, col -1);
        visited[row][col -1] = true;
    }
    if(!found && maze[row - 1][col]!=1 && !visited[row-1][col]) { // move up
        makeMove(row-1, col);
        visited[row-1][col] = true;
    }
    if(!found && maze[row][col + 1]!=1 && !visited[row][col + 1]) { // move right
        makeMove(row, col + 1);
        visited[row][col + 1] = true;
    }
    if(!found && maze[row + 1][col]!=1 && !visited[row + 1][col]) { // move down
        makeMove(row + 1, col);
        visited[row + 1][col] = true;
    }

当在 8 行 8 列的迷宫中像这样运行时,我不断收到堆栈溢出错误。

我相信错误显示它位于第 42 行和第 50 行,这将是
42. MakeMove(row-1, col); //to move up
50.makeMove(row + 1, col); //to move down .

我在这两个方面犯了逻辑错误吗?

最佳答案

您应该将迷宫的当前状态作为 makeMove 方法的参数。您的情况下迷宫的状态是访问的矩阵。

关于java - 行列迷宫递归错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106628/

相关文章:

java - 端点的 Camel 处理器

java - 将 Clob 转换为字符串

c - 逐行解释代码

c - 没有节点结构的二叉搜索树递归

java - 迷宫求解器的递归

security - 设置缓冲区溢出学习环境

java - 是否建议为程序中的每个类编写一个测试用例?

Java、Spring、Tomcat 在 "INFO: Initializing Spring root WebApplicationContext"挂起,我想我更改了整个系统的允许内存堆

python - 递归? Python 中循环到 n 层

来自大数据的 Clojure 频率字典