需要Java代码说明(递归迷宫求解器)

时间:2016-12-13 20:44:27

标签: java recursion

可能会有一些后续问题(这是家庭作业),但我们必须使用递归方法在我的Java编程类(完全初学者)中解决迷宫。现在我的问题不是实际解决(但是,我确信它很快就会成为我的问题),但事实上我们已经由老师给出了部分代码,并且其中有一些内容我绝对没有知道它是什么,或它意味着什么。

是的,我可以问我的老师,但我真的不喜欢这个人,我真的只是想学习Java并获得一些大学学分。

public class MazeSolver {

    public static void main(String[] args) {

        int[][] mArr = {
            {2, 1, 1, 1, 0, 1, 1, 1},
            {1, 1, 0, 1, 0, 1, 1, 0},
            {0, 1, 1, 0, 1, 1, 1, 1},
            {0, 0, 1, 1, 1, 0, 1, 0},
            {1, 0, 0, 0, 1, 0, 1, 1},
            {0, 0, 0, 0, 1, 1, 0, 1},
            {0, 0, 0, 0, 0, 1, 1, 3}
        };

        boolean result = solve(mArr, 0, 0); // i = 0, j = 0: Point of entry in the upper left corner
        String str = (result) ? "" : " nicht";
        System.out.println("Das Labyrinth ist" + str + " loesbar");
    }

        static boolean solve(int[][] mArr, int i, int j) {


        return false;
    }

        static void print(int[][] mArr) {
        System.out.println();
        for (int[] arr : mArr) {
            for (int n : arr) {
                System.out.print(n + " ");
            }
            System.out.println();
        }
        System.out.println();
    }

}

好的,所以我的问题是这一行:boolean result = solve(mArr,0,0); // i = 0,j = 0:左上角的入口点。

我假设这意味着结果是我仍然要定义的方法的结果,但是什么是(mArr, 0, 0)?我猜这应该给迷宫中的位置,但我认为数组中的位置是mArr [0][0]。程序如何知道0和0是i和j或者是某些我需要在某个时候告诉它的东西?

2 个答案:

答案 0 :(得分:0)

solve()调用您定义的方法static boolean solve(int[][] mArr, int i, int j) { int startPosValue = mArr[i][j] //code to determine return value } 。它将数组以及i和j传递给该方法。 i和j代表起始位置。你是正确的,起始位置是mArr [i] [j],所以在解决方法中,这样做。

DownloadFileAsyncTask

答案 1 :(得分:0)

让我们假设你只能向右或向下移动,否则就不可能用这三个参数来解决。然后,算法将是:

static boolean solve(int[][] mArr, int i, int j) {
    if (mArr[i][j] == 3) {
        return true;
    } else {
    try {
        if (arr[i+1][j] == 1 &&solve(mArr, i+1, j))
            return true;
    }catch(IndexOutOfBoundsException e) {};
    try {
        if (arr[i][j+1] == 1 && solve(mArr, i, j+1))
            return true;
    }catch(IndexOutOfBoundsException e) {};
    return false;
}

如果存在路径,则返回true,否则返回false

它如何运作?

签名可以改写:

static boolean solve(int[][] mArr, int currentX, int currentY)

检查mArr[i][j]是否为3(结束)。如果是,则返回true。否则,它会检查是否有可能通过向右或向下移动到达终点。