2016-02-20 34 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,所以你会得到一个超出界限的例外。