2016-12-13 62 views
0

有可能出現一些跟進這個問題(是的,這是家庭作業),但我們有一個使用遞歸方法來解決我的Java編程類(初學者)迷宮。現在,我的問題是不實際的解決(但,我相信它很快就會是我的問題),但事實上,我們一直在老師給出的代碼的一部分,並且在它的一些東西,我絕對沒有線索是什麼,或者它的意思。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(); 
    } 

} 

確定,所以我的問題是這樣的線:布爾結果=解決(馬爾,0,0); // i = 0,j = 0:輸入點位於左上角。

我假定這意味着,結果是我依然定義方法的結果,但什麼是(mArr, 0, 0)?我猜這應該是在迷宮中的位置,但我認爲陣列中的位置是mArr [0][0]。該程序如何知道0和0是我和j還是我需要在某個時刻告訴它的東西?

+0

你能澄清的陣列中的0,1S,2S和3S意思? – xenteros

+0

我會猜測2是開始,3是結束,1是可能的空間移動到 – holtc

+0

那麼爲什麼你會指定開始位置?在這兩種情況下,我都不認爲它會改變OP的問題 –

回答

0

解決()調用您已經定義static boolean solve(int[][] mArr, int i, int j) {的方法。它將數組,以及i和j傳遞給該方法。我和j代表起始位置。你是正確的,開始的位置是mArr [i] [j],所以在解決方法中,做到這一點。

static boolean solve(int[][] mArr, int i, int j) { 
    int startPosValue = mArr[i][j] 
    //code to determine return value 
} 
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。否則,通過向右或向下移動來檢查是否有可能達到目的。

+0

「現在我的問題不是實際解決(但是,我相信它很快就會成爲我的問題)」。哦,他是多麼的錯誤。 – Kayaman

+0

我特別沒有要求解決方案,只是爲了解釋,現在我只希望我的老師不會找到這個... –

+0

@ScotMatson它是遞歸解決方案。 – xenteros