【发布时间】:2015-06-13 00:28:38
【问题描述】:
我正在尝试使用递归方法来解决由 Java 中的 1 和 0 组成的 int 数组表示的迷宫。 wasHere[] 检查该方法是否已经解析了特定的坐标集,correctPath[] 记录迷宫的答案路径;它们都被初始化,每个索引都为假。
import java.awt.Point;
class mazeSolver{
int[][] maze;
int startX, startY;
int endX, endY;
int width, height;
boolean[][] wasHere, correctPath;
mazeSolver(int[][] m, int sX,int sY,int nX,int nY){
maze = m;
width = maze[0].length;
height = maze.length;
startX = sX;
startY = sY;
endX = nX;
endY = nY;
System.out.println("Height: " + height + "\t Width: " + width);
correctPath = new boolean[height][width];
wasHere = new boolean[height][width];
for (int row = 0; row < maze.length; row++)
for (int col = 0; col < maze[row].length; col++){
wasHere[row][col] = false;
correctPath[row][col] = false;
}
solveMaze(startX,startY);
}
public boolean solveMaze(int x, int y){
boolean solvable = recursiveSolve(x,y);
return solvable;
}
private boolean recursiveSolve(int x, int y){ //1s are walls, 0s are free space
if (x == endX && y == endY)
return true;
if (wasHere[y][x] || maze[y][x] == 1)
return false;
wasHere[y][x] = true;
if (y < height-1){
if (solveMaze(x,y+1))
return true;
}
if (y > 0){
if (solveMaze(x,y-1))
return true;
}
if (x > 0){
if (solveMaze(x-1,y))
return true;
}
if (x < width-1){
if (solveMaze(x+1,y))
return true;
}
return false;
}
public int[][] getSolvedMaze(){
for(int y = 0; y < height; y++)
for (int x = 0; x< width; x++)
if(correctPath[y][x])
maze[y][x] = 2;
return maze;
}
}
过去几个小时我一直被这个错误困扰,任何帮助将不胜感激。
【问题讨论】:
-
粘贴您的完整代码。
-
可能没有bug。你的迷宫有多大?堆栈是有限的,所以每个堆栈都有一个足够大的迷宫来溢出它。
-
@BarryFruitman 我的测试迷宫是 300x400。我最好也处理 2000x2000 的文件
标签: java recursion stack-overflow maze