ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

递归——迷宫

2021-10-31 18:06:21  阅读:157  来源: 互联网

标签:map return 递归 int 迷宫 System else setWay


递归

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有