这个算法成功地为我提供了一条通过迷宫的路径.迷宫是一个二维二进制矩阵,目标位置是‘9’.
该算法的工作原理是遍历到达‘9’(基本大小写)的‘0’路径,并递归地将以前的位置添加到我的路径数组中.
我观察到,删除顶部的边界检测线会产生索引越界错误.但我很确定,当小路碰到一堵墙时,这个算法就会崩溃.
它在200x200或更小的矩阵上也能顺利工作,在250x250的情况下大约有50%的时间可以正常工作. (如下面的100宽度图所示.)
public static boolean searchPath(int[][]maze, int x, int y, ArrayList<Integer> path){
if(x<0 || x>=maze[1].length || y<0 || y>=maze.length) return false;
if(maze[y][x] == 9){
path.add(x);
path.add(y);
return true;
}
if(maze[y][x] == 0){
maze[y][x] = 2;
int dx = -1;
int dy = 0;
if(searchPath(maze, x+dx, y+dy, path)){
path.add(x);
path.add(y);
return true;
}
dx = 1;
dy = 0;
if(searchPath(maze, x+dx, y+dy, path)){
path.add(x);
path.add(y);
return true;
}
dx = 0;
dy = -1;
if(searchPath(maze, x+dx, y+dy, path)){
path.add(x);
path.add(y);
return true;
}
dx = 0;
dy = 1;
if(searchPath(maze, x+dx, y+dy, path)){
path.add(x);
path.add(y);
return true;
}
}
return false;
}