2016-02-20 37 views
0

這裏是迷宮遍歷方法和full code如何解決這個遞歸迷宮算法?

import java.io.*; 
import java.util.*; 

public class Quest { 

    static char[][] maze = new char[10][10]; 
    public static void main(String[] args) throws IOException { 
     Scanner scan = new Scanner(new File("quest.dat")); 
     String s = ""; 
     int n = scan.nextInt(); 
     scan.nextLine(); 

     while (n-->0) { 
      for (int i=0; i<10; i++) { 
      s = scan.nextLine(); 
      if (s.equals("-")) 
       break; 
      for (int j=0; j<10; j++) 
      maze[i][j] = s.charAt(j); 
     } 
     int r = searchR(); 
     int c = searchC(); 
     //System.out.println(r + " " + c); 
     mazeTraverse(r, c); 
     for (int i=0; i<10; i++) { 
     for (int j=0; j<10; j++) 
      System.out.print(maze[i][j]); 
     System.out.println(); 
    } 
    } 
} 
public static void mazeTraverse(int r, int c) { 
if ((r>0 && r<maze.length && c>0 && c<maze.length) && maze[r][c] == 'H') 
    return; 
if ((r>0 && r<maze.length && c>0 && c<maze.length) && (maze[r][c]=='.' || maze[r][c]=='A')) { 
    if (!(maze[r][c]=='A')) 
    maze[r][c] = 'O'; 

     mazeTraverse(r+1, c); 
     mazeTraverse(r-1, c); 
     mazeTraverse(r, c+1); 
     mazeTraverse(r, c-1); 

     maze[r][c] = '.'; 
    } 
} 

public static int searchR() { 
for (int r=0; r<10; r++) { 
    for (int c=0; c<10; c++) { 
    if (maze[r][c]=='A') 
     return r; 
    } 
} 
return -1; 
} 
public static int searchC() { 
    for (int r=0; r<10; r++) { 
    for (int c=0; c<10; c++) { 
     if (maze[r][c]=='A') 
     return c; 
    } 
    } 
    return -1; 
    } 
} 

當我運行它只是連續運行,不會停止程序,但我檢查,我得到了正確的R和C值,從而可能是什麼問題?迷宮是10x10,所以他們是完美的廣場。

+0

你確定迷宮是方形的嗎?如果它不是,請查看我的答案。如果它是_is_,那麼我的回答是錯誤的,但代碼共享網站需要一段時間才能加載,所以我無法立即檢查。 – Arc676

+0

是的,這是一個正方形,它們都是10x10。 –

+0

在這種情況下,索引從0到9.'java.lang.ArrayIndexOutOfBoundsException:10'此錯誤表示您嘗試訪問不存在的第10個元素。 – Arc676

回答

0

Meta talk:如果我在這裏留下這個答案,它是不好的,知道這是錯誤的,如果我想獲得Peer Pressure徽章?


您正在檢查rc到小於所述maze陣列的 「長度」,但maze是2D。這意味着有2個長度要檢查。 (想象一下數組作爲一個矩形。有一個長度也是一個高度,他們可能是不一樣的。)

c<maze.length 

該檢查將不幫助你,因爲c在第二索引中。

嘗試

c < maze[0].length //however, this assumes that there is at least one element in the array 

實施例:

說的maze尺寸是5X3。 maze.length會給5,而maze[0].length會給3.你的支票將會看看c是否小於5. 4小於5,但不小於3,所以你會得到一個超出界限的例外。