【剑斩OFFER】算法的暴力美学——力扣 1926 题:迷宫中离入口最近的出口

一、题目描述

二、算法原理

思路:BFS 算法

我们看到上面这张图片,求 A 到 E 的最短路径,此时我们可以使用一个队列来实现层序遍历来实现 BFS 算法,我们先把 A 入队列,假设两点之间的距离都为 1,所以此时队列情况:

A -> B -> C

此时因为 B 下一个就是 E 了,所以:

A -> B -> C-> E,那么 D 就没有必要入队列了,因为 E 已经找到了,那么最短路径的长度就是

剥离的次数:

这道题目和这个示例的解法一样,只不过我们要创建一个和原二维数组的一样大小的数组用来标记哪些值被遍历的,不要重复遍历;

三、代码实现

cpp 复制代码
class Solution {
    int dx[4] = {1,-1,0,0};
    int dy[4] = {0,0,1,-1};
    bool tmp[200][200];
    typedef pair<int,int> PII;
public:
    int nearestExit(vector<vector<char>>& maze, vector<int>& enter) {
        int x = enter[0], y = enter[1];

        queue<PII> que;//使用层序遍历
        que.push({x,y});
        tmp[x][y] = true;

        int count = 0;
        while(que.size())
        {
            int forl = que.size();
            
            count++;//最短的剥离次数就是最短路径
            while(forl--)//控制剥离的层数
            {
                auto [a,b] = que.front();
                que.pop();
                for(int i = 0; i < 4; i++)
                {
                    x = a + dx[i];
                    y = b + dy[i];

                    if(x >= 0 && x < maze.size() && y >= 0 && y < maze[0].size() && maze[x][y] == '.' && tmp[x][y] == false)
                    {
                        if(x == maze.size() - 1 || x == 0)//到达出口
                        {
                            return count;
                        }
                        else if(y == maze[0].size() - 1 || y == 0)//到达出口
                        {
                            return count;
                        }
                        else
                        {
                            tmp[x][y] = true;
                            que.push({x,y});
                        }
                    }
                 }
            }
        }
        return -1;
    }
};
相关推荐
怕浪猫6 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记6 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_37 小时前
二叉树の递归遍历
算法
All for pursuit.7 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉8 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
WL学习笔记9 小时前
日期类(C++)
开发语言·c++·日期类实现
H.莓飛9 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
一只小小的芙厨10 小时前
【线性DP】
学习·算法·动态规划
奋发向前wcx10 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
汉克老师11 小时前
GESP2026年9月认证C++八级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程