迷宫问题求解

起始图形样例: 


  

代码思想:使用递归回溯算法,首先先选择一个方向进行,尝试着走,(行走的优先级 : 下 右 上 左),如果走不通就将该路径设置为 3 。

实现代码如下:

public class Migong {
    public static void main(String[] args) {
        //初始化map地图
        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;
        }
        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.printf("%d ",map[i][j]);
            }
            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.printf("%d ",map[i][j]);
            }
            System.out.println();
        }

    }

    //编写递归方法
    public static Boolean setWay(int[][] map,int i, int j){
        //递归出口
        if(map[6][5] == 2){ //走到右下角的空格时,成功退出
            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{//这里是可能是 1 ,2 ,3
//                return false; //这里也要给出出口,否则
//            }
        }
        return false;
    }
}

打印结果:

 特别说明:因为只有当map[6][5]唯一出口,因此其他情况都返回 false。所有,只要不是出口,返回false值就可以,在哪个地方不重要。

相关推荐

  1. 1076. 迷宫问题(bfs,记录路径)

    2023-12-23 03:34:01       67 阅读
  2. 【每日算法】dfs解决迷宫问题

    2023-12-23 03:34:01       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-23 03:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-23 03:34:01       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-23 03:34:01       82 阅读
  4. Python语言-面向对象

    2023-12-23 03:34:01       91 阅读

热门阅读

  1. Android将自定义的SurfaceView保存为bitmap

    2023-12-23 03:34:01       54 阅读
  2. Mysql配置主从同步流程

    2023-12-23 03:34:01       61 阅读
  3. C++ STL priority_queue容器详解

    2023-12-23 03:34:01       68 阅读
  4. jar 包依赖相关

    2023-12-23 03:34:01       58 阅读