--- 单源BFS权值为一算法 迷宫中离入口最近的出口 ---

单源bfs,从一个固定的点开始向外遍历找到一个离自己最近的点,而当他向外遍历时,第一次碰到了满足要求的点,那么这时这一条路就是最近的,对应到这道题就是从entrance遍历到边界的最近的出口,而为什么第一次bfs到他就是最近的?

可以这样理解,每一次bfs就相当于从这个点开始向外的每个点都走了一步,这样就走出了不同的路径,让后当有个点路径第一次走到了出口,那么他就时最近的,因为每一条路径的权值都是相同的

bfs的实现

将固定源储存在一个队列中,以这个点为原点开始向四周遍历,记为第一层,四周遍历的点又储存在队列中,记为第二层的节点,当吧第一层的所有节点出完,点第二层的节点也遍历完了,这时队列中的全是第二层的节点了,这就完成了一层的bfs,重复这个过程,直到队列为空,那么就完成了层序遍历

java 复制代码
    int[] dx = {0, 0, -1, 1};
    int[] dy = {-1, 1, 0, 0};

    public int nearestExit(char[][] maze, int[] entrance) {
        int m = maze.length;
        int n = maze[0].length;
        boolean[][] check = new boolean[m][n];
        List<int[]> list = new LinkedList<>();
        list.add(new int[]{entrance[0], entrance[1]});
        check[entrance[0]][entrance[1]] = true;

        int times = 0;
        while (!list.isEmpty()) {
            times++;
            int size = list.size();
            for (int i = 0; i < size; i++) {
                int[] arr = list.remove(0);

                for (int j = 0; j < 4; j++) {
                    int yy = arr[0] + dy[j];
                    int xx = arr[1] + dx[j];

                    if (yy < 0 || yy == m || xx < 0 || xx == n || check[yy][xx] || maze[yy][xx] == '+') continue;

                    if (yy == 0 || yy == m - 1 || xx == 0 || xx == n - 1) {
                        return times;
                    }

                    check[yy][xx] = true;
                    list.add(new int[]{yy, xx});
                }
            }
        }
        return -1;
    }

类似的题还有

最小基因变化 单词接龙 diff 为高尔夫砍树

相关推荐
小超人诞生日记27 分钟前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision4 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.3335 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
小郎君6585 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie7776 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai
東隅已逝,桑榆非晚6 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
专注仿真6 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
FII工业富联科技服务6 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
≮傷£≯√6 小时前
httpserver_QNetWorkClient
算法
Evand J6 小时前
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
算法·matlab·卡尔曼滤波·永磁同步电机·ukf·pmsm·位置估计