[英]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.