迷宫回溯——递归

1.什么是递归?
自己调用自己,每次传入的方法参数不同。

2.需求:
终止条件,和递归规律

在这里插入图片描述
代码:

package com;

public class Mul {
    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;
            map[i][0]=1;
            map[i][6]=1;
        }

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

//打印地图
        for(int []a:map)
        {
            for(int data:a)
            {
                System.out.print(data+" ");
            }
            System.out.println();
        }
        System.out.println("=======================");


//使用递归找路:
        findWay(map,1,1);
        //打印地图
        for(int []a:map)
        {
            for(int data:a)
            {
                System.out.print(data+" ");
            }
            System.out.println();
        }

    }


    //使用递归回溯来给小球找路
    //1.先传给地图,告诉他从哪开始寻找
    //如果找到通路,返回true,否则false
    //约定:如果找到map[6][5];
    //若map[i][j]为0时,表示还没走过;1表示墙;2表示通路;3走过了但走不通

    //走之前确定一个策略:下右上左

    public static boolean findWay(int [][]map,int i,int j){
        if(map[i][j]==2)
            return true;
        else{
            if(map[i][j]==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;
            }
        }
    }



}

思考:
如何走出最短路径?
我们在这里走的是自己规定的策略,所以走的路线和自己最初规定的策略有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值