Recursive maze problem

Insert picture description here
Until the point of the small ball mark of 6, 5

package com.demo;

public class LosePath {
    
    
    public static void main(String[] args) {
    
    
//创建一个二维数组,模拟迷宫问题
//        地图
        int[][] map = new int[8][7];
//        使用1表示墙
//        上下全部置为1
        for (int i = 0; i < 7; i++) {
    
    
            map[0][i] = 1;
            map[7][i] = 1;


        }
//        左右全部置为1
        for (int i = 0; i < 8; i++) {
    
    
            map[i][0] = 1;
            map[i][6] = 1;

        }

//        设置挡板
        map[3][1] = 1;
        map[3][2] = 1;

        System.out.println( "小球开始的地图:" );
//        遍历输出一把
        for (int i = 0; i < 8; i++) {
    
    
            for (int j = 0; j < 7; j++) {
    
    
                System.out.print( map[i][j] + " " );

            }
            System.out.println();

        }


//        玩一把,从1,1开始找
        setWay( map,1,1 );
        System.out.println( "小球走过的地图" );
        for (int i = 0; i < 8; i++) {
    
    
            for (int j = 0; j < 7; j++) {
    
    
                System.out.print( map[i][j] + " " );

            }
            System.out.println();

        }


    }

    //    设置找到小球的方法
    /*1.map[6][5]表示小球的位置
     *2.  i,j表示从哪个位置出发(1,1)
     *3.  如果小球能找到map[6][5]位置说明通路找到。
     *4.  约定:当map[i][j] 为0表示该点没有走过,1表示墙,2表示通路可以走,3表示该点已经走过,但是走不通
     * 5. 定一个策略,下--》右--》上--》---》左如果该点走不能再回溯
     *@param map 表示地图
     * @param i ,j 表示开始的位置
     * return 如果找到通路,批回true,否则返回false.
     *
     * */
    public static boolean setWay(int[][] map, int i, int j) {
    
    
 if(map[6][5]==2){
    
    //通路找到ok
     return true;
 }else{
    
    
     //如果当前这个点还没有走
     if(map[i][j]==0){
    
    
//         定一个策略,下--》右--》上--》---》左如果该点走不能再回
         map[i][j]=2;//先假定这个 点可以走通
         if(setWay( map,i+1,j )){
    
    

             return true;
         }else if(setWay( map,i,j+1 )){
    
    
             return true;

         }else if(setWay( map,i-1,j )){
    
    


             return true;
         }else if(setWay( map,i,j-1 )){
    
    

             return true;
         }else{
    
    
//             说明该点走不通,是死路
             map[i][j]=3;
             return false;
         }
     }else{
    
    
//如果不是0,可能是1,2,3
         return false;
     }




 }



    }
 }

Guess you like

Origin blog.csdn.net/houzhicongone/article/details/114581560