2016-12-13 110 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