递归迷宫问题

public class Migon01{
    public static void main(String[] args) {
        //第一步先创建迷宫
        //1.利用双层数组进行设置,可以通过的路径设置成 0 ,墙壁设置 成 1
         int arr[][] = new int[8][7];
         //利用for喜欢设置墙壁
         for(int i = 0; i < 7; i++){
             // 设置列
             arr[i][0] = 1;
             arr[i][6] = 1;
             // 设置行
             arr[0][i] = 1;
             arr[7][i] = 1;
         }
         //设置两个特殊值
         arr[3][1] = 1;
         arr[3][2] = 1;
         for(int i = 0; i < arr.length; i++){
             for(int j = 0; j < arr[i].length; j++){
                 System.out.print(arr[i][j] + " ");
             }
             System.out.println();
         }
         System.out.println("====================");
         //创建一共玩家T对象
         T t = new T();
         t.findWay(arr, 1, 1);//先把数组传入, 然后把初始值传入
         //for循环从新遍历数组,查看是否实现
         for(int i = 0; i < arr.length; i++){
             for(int j = 0; j < arr[i].length; j++){
                 System.out.print(arr[i][j] + " ");
             }
             System.out.println();
         }

    }

}

class T{
    //创建findWay方法,寻找迷宫出炉
    //1.第一步先等到初始值 arr[1][1]
    //2.确定迷宫出口 arr[6][5]
    //3.如果找到就返回true 没有找到就返回 false
    //4.设置 0 表示可以走  1表示不可以走 2表示可以走  3表示可以走但是走过是死路
    //5.当终点 arr[6][5] = 2 表示已经走出来了
    //6.先确定老鼠是怎么走的 下-> 右 -> 上 -> 左
    //7.利用 i  和 j 确定老鼠的位置
    //
    public boolean findWay(int arr[][], int i, int j){
        if(arr[6][5] == 2){//先判断是否在出口位置
            return true;
        }else{
            if(arr[i][j] == 0){
                //先假定可以执行
                arr[i][j] = 2;
                if(findWay(arr, i + 1, j)){ //判断是否可以往下走
                    return true;
                }else if(findWay(arr, i, j + 1)){ //判断是否可以往右走
                    return true;
                }else if(findWay(arr, i - 1, j)){//判断是否可以往上走
                    return true;
                }else if(findWay(arr, i, j -1)){//判断是否可以往左走
                    return true;
                }else{
                    arr[i][j] = 3;
                    return false;
                }
            }else{//表示arr[i][j] == 1 或 2 或3
                return false;
            }
        }
    }
}4f7665e7693d42fea1d05ff4c3bf6295.jpg

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值