【剑斩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;
    }
};
相关推荐
xiaoye-duck8 小时前
《C++ 工具库实战》gflags 命令行参数解析库详解
c++·第三方库
一去不复返的通信er8 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
狂奔的sherry8 小时前
C++ 宏生成访问函数的代价:访问权限、调试和类型检查
c++·宏·编译·预处理器·类型检查
Shaoshing8 小时前
LeetCode100 49. 字母异位词分组
java·算法
YFJ_mily9 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
汤姆宝库9 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
划破黑暗的第一缕曙光9 小时前
[C++]:5.STL:string(2)
java·c++·redis
moshuying11 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法
没落之王11 小时前
历史系统建模:宋初太祖太宗「再立天庭」秩序重构推演
人工智能·算法·重构