【剑斩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;
    }
};
相关推荐
CoovallyAIHub2 分钟前
AAAI 2026这篇杰出论文说了什么?用LLM给CLIP换了个“聪明大脑”
深度学习·算法·计算机视觉
Physicist in Geophy.14 分钟前
一维波动方程(从变分法角度)
线性代数·算法·机器学习
im_AMBER20 分钟前
Leetcode 115 分割链表 | 随机链表的复制
数据结构·学习·算法·leetcode
Liue6123123121 分钟前
【YOLO11】基于C2CGA算法的金属零件涂胶缺陷检测与分类
人工智能·算法·分类
!!!!81326 分钟前
蓝桥备赛Day1
数据结构·算法
Mr_Xuhhh26 分钟前
介绍一下ref
开发语言·c++·算法
王老师青少年编程28 分钟前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
夏鹏今天学习了吗30 分钟前
【LeetCode热题100(99/100)】柱状图中最大的矩形
算法·leetcode·职场和发展
Trouvaille ~32 分钟前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组
啊阿狸不会拉杆36 分钟前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝