递归经典问题--老鼠迷宫

代码:

public class MiGong{

           public static void main(String[] args){
           
            
                   //先创建迷宫,二维数组 表示 int[][] map = new int[8][7];
                   //先规定map数组的元素值 0:表示可以走 1:表示障碍物
                       int[][] map = new int[8][7];
                        for (int i = 0;i < 7 ;i ++ ) {
                                  map[0][i] = 1;
                                  map[7][i] = 1;
                    
                            }  
                            map[3][1]=1;
                            map[3][2]=1;
                            //将最左边和最右边的一列,全部设置为1 
                         for (int i=0;i< 8 ;i++ ) {
                               map[i][0]=1;
                               map[i][6]=1;
                          } 
                            //输出地图
                            System.out.println("==========地图情况");
 
                            for (int i = 0;i                                     for (int j = 0;j< map[i].length ;j++ ) {
                                        System.out.print(map[i][j]+" ");//输出一行          
                                               }  
                               System.out.println();
      
                                           }  
                   T t1 = new  T();
                   t1.findway(map,1,1);
                   System.out.println("=====找路的情况======");
                     for (int i = 0;i                                     for (int j = 0;j< map[i].length ;j++ ) {
                                        System.out.print(map[i][j]+" ");//输出一行          
                                               }  
                               System.out.println();
      
                                           }

       }
}
class T{
 //使用递归回溯的思想
 //findway 专门找出迷宫的路径
 //如果找到 返回true 否则返回false
 //map就是二维数组 即表示迷宫
 //i,j 就是老鼠的初始位置(1,1)
 //0表示可以走 ,1表示障碍物 2 表示可以走 3表示走过 但是走不通是死路 
 //当map[6][5]=2说明找到出路,就可以结束,否则就继续找
 //老鼠策略 下-右-上-左
 public boolean findway(int[][] map,int i, int j){
      if (map[6][5]==2) {//找到路
            return true;
      }else {
            if (map[i][j]==0) {//当前位置为0,说明可以走
                 //假定可以走通
                 map[i][j] = 2;
             //使用找路策略,确定位置是否可以走通
            if (findway(map,i+1,j)) {
                 return true;
            }else if (findway(map,i,j + 1)) {//右
                return true;
            }else if (findway(map,i-1,j)) {//向上走
                return true;
            }else if (findway(map,i,j-1)) {//左
                return true;
            }else {
                map[i][j]=3;
                return false;
            } 


            }else {
                 return false;
            }
      }

 }

}

你可能感兴趣的:(Java,java,算法,开发语言)