上一篇写了生成迷宫的算法,下面将一下遍历迷宫。
用一个二维数组,数组大小和地图的数组一样(0表示路,1表示墙,3表示找的一条通路),只是要用递归回溯找到所有路,判断上(-1,0),下(1,0),左(0,-1),右(0,1)是否是通路,是否走过,是则记录为3,为了方便打印,到达终点就打印出来,并清零,方便下一条路径也可以访问。如果走到死胡同,就回溯到开始的位置,直到找到所有的路径。
//从给定的点开始遍历迷宫
//maze[i][j] = 3;标识已走
//maze[i][j] = 2;标识死胡同
//maze[i][j] = 1;标识墙
//maze[i][j] = 0;标识可以走
public void search(int i, int j)
{
int newx;//表示新的x点
int newy;//表示新的y点
//下、右、上、左
int[] fx = {1,0,-1,0};
int[] fy = {0,1,0,-1};
for (int k=0;k<4;++k)//分别向下,右,上,左试探是否是路
{
newx = i+fx[k];
newy = j+fy[k];
//如果不是墙,且没有走过
if (newx>=0 && newx <maze.length && newy>=0 && newy<maze.length && maze[newx][newy]==0)
{
maze[newx][newy] = 3;//标识已走
if (newx==maze.length-2&& newy==maze.length-2)//如果走到终点
{
printPath();//打印这条通路
maze[newx][newy] = 0;//清除访问记录,下一条路径也可以访问
}
else
{
search(newx,newy);
}
}
}
//如果上下左右都是墙,回溯
maze[i][j] = 0;//回溯的时候将此点标记未访问,这样下一条路径也可以访问
}
仅供参考,还有更多方法哦。