java迷宫之遍历迷宫

上一篇写了生成迷宫的算法,下面将一下遍历迷宫。
用一个二维数组,数组大小和地图的数组一样(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;//回溯的时候将此点标记未访问,这样下一条路径也可以访问
   }

仅供参考,还有更多方法哦。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值