问题理解:使用分而治之递归解决迷宫

时间:2020-04-24 00:24:28

标签: java algorithm recursion divide-and-conquer

我正在尝试使用d&c进行递归求解迷宫。我已经阅读了d&c算法的内容,但是在将其递归使用程序时遇到了麻烦。我能够使程序打印出迷宫,表明程序已经走过了整个迷宫,并打印了出口坐标,但是我无法让它仅显示最短的正确路径(而不是显示它正在运行)迷宫中的每个点)。我也有一个问题,它既要打印出口坐标又要打印起点坐标,这不是我想要的。

任何帮助或提示将不胜感激。我并不是直接寻找“这就是您的做法”,而是尝试这种方法或d&c应该真正像这样使用。

我还包括了递归方法。迷宫由一个1的边界板组成,所有可用路径均为0。当检查并运行0时,它将变成2。

public int RecursiveRead(int row, int column, int pathLength) {
        try {
        if (maze[row][column] == 1) {
            return -1;
        }

        if (maze[row][column] == 0) {
            maze[row][column] = 2;
            return 1 + (Math.min(Math.min(RecursiveRead(row + 1, column, pathLength + 1), RecursiveRead(row - 1, column, pathLength + 1)),
                    Math.min(RecursiveRead(row, column + 1, pathLength + 1), RecursiveRead(row, column - 1, pathLength + 1))));
        }
        } catch (ArrayIndexOutOfBoundsException e) {
            maze[row][column] = 2;
            System.out.println("Exit is: (" + row + ", " + column + ")");
        }

        return 1;
    }
public void MazeSolver() {
        if (RecursiveRead(1, 0, 0) == -1) {
            System.out.println("There is no exit");
            return;
        } else {

            try {
                FileWrite();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return;

编辑: 澄清的问题: 我想知道如何使用分而治之递归地找到出口的最短路径,或者是否不存在出口。

0 个答案:

没有答案