其他分享
首页 > 其他分享> > 递归——迷宫

递归——迷宫

作者:互联网

递归

迷宫回溯
如下是一个建议迷宫,编写程序使得显示从开始位置到终点的一条路径
(问题详解与思路均在代码题解中)
请添加图片描述
代码实现

package recursion;

public class labyrinth {
    public static void main(String[] args) {
        //先创建一个二维数组,模拟迷宫
        //创建地图
        int[][]map=new int[8][7];
        //使用1来作为围墙
        //通过两个循环来构建一个四面围墙
        for (int i=0;i<7;i++)
        {
            map[0][i]=1;
            map[7][i]=1;
        }
        for (int i=0;i<8;i++)
        {
            map[i][0]=1;
            map[i][6]=1;
        }
        //设置挡板,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();
        }
        for (int i=0;i<3;i++)
            System.out.println();
        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是我们定义的地图
    2.递归参数i,j表示我们在进行下一步时触发的位置
    3.约定:当map[i][j]为0表示该点没有走过,为1表示该点为墙,为2表示通路可走,为3表示已经走过但是不通
    4.在走迷宫时,确定一个模式,每次寻路按照下->右->上->左,如果走不通就回溯
     */
    public static boolean setWay(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 (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;//按照约定此处置为3
                    return false;
                }

            } else {//如果map[i][j]!=0,可能是1,2,3
                return false;
            }
        }
    }
}

标签:map,return,递归,int,迷宫,System,else,setWay
来源: https://blog.csdn.net/LateNight_LL/article/details/121067439