簡體   English   中英

需要Java代碼說明(遞歸迷宮求解器)

[英]Java code explanation needed (recursive maze solver)

對此可能會有一些后續問題(是的,這是家庭作業),但是我們必須使用遞歸方法來解決我的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();
    }

}

好的,所以我的問題是這一行:布爾結果= solve(mArr,0,0); // i = 0,j = 0:入口點在左上角。

我假設這意味着結果是我仍然要定義的方法的結果,但是(mArr, 0, 0)什么? 我猜想應該在迷宮中給出位置,但是我認為數組中的位置就是mArr [0][0] 程序如何知道0和0是i和j或在某個時候需要告訴我的東西?

static boolean solve(int[][] mArr, int i, int j) { ()調用您已定義的方法static boolean solve(int[][] mArr, int i, int j) { 它將數組以及i和j傳遞給該方法。 i和j代表開始位置。 您的正確位置是起始位置為mArr [i] [j],因此在Solve方法內部執行此操作。

static boolean solve(int[][] mArr, int i, int j) {
    int startPosValue = mArr[i][j]
    //code to determine return value
}

假設您只能向右或向下移動,否則無法使用這三個參數來解決。 然后,該算法將是:

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 否則,它將檢查是否有可能通過向右或向下移動到達終點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM