《LeetCode 1926 最近出口的迷宫 单源BFS解法》
📅 2026/7/6 15:14:51
👁️ 次浏览
一.题目1926. 迷宫中离入口最近的出口 - 力扣LeetCode二.思路讲解2.1 本章讲什么本章主要讲解在无权图即每一步移动的代价相同中如何用BFS求解最短路径问题。因为 BFS 具有按层扩散的特性从起点出发第一次访问到某个格子时所经过的步数就是到达该格子的最短距离。因此只要在 BFS 过程中记录当前层的层数一旦遇到满足条件的出口即边界上的空格子且不是入口本身就可以立即返回该层数这就是最近出口的距离。这种思想适用于所有移动代价为 1 的网格搜索问题。2.2 思路讲解对于本题我们可以直接使用 BFS 从入口开始向外逐层探索将入口坐标入队并标记已访问防止走回头路。用变量step记录当前层数初始为 0。当队列不为空时按层处理先记录当前层的大小sz然后循环sz次依次取出队头格子。若当前格子位于迷宫边界且不是入口则返回step因为这是第一次到达边界一定是最短路径。否则向四个方向尝试移动若邻居格子是空格子且未被访问则将其入队并标记。一层处理完后step继续下一层。如果 BFS 结束后仍未找到出口返回 -1。三.代码演示class Solution { public: int bx[4] {0,0,-1,1}; int by[4] {1,-1,0,0}; typedef pairint,intPII; bool check[101][101]; int nearestExit(vectorvectorchar maze, vectorint entrance) { int step 0;//步数 int row maze.size(), col maze[0].size(); int x entrance[0],y entrance[1];//获取起点 queuePIIq; q.push({x,y}); check[x][y] true; while(q.size()) { step; int sz q.size(); for(int i 0;i sz;i) { auto [a,b] q.front(); q.pop(); for(int k 0;k 4;k) { int x a bx[k],y b by[k]; if(x 0 y 0 x row y col !check[x][y] maze[x][y] .) { //如果下一个是出口 if(x 0 || x row - 1 || y 0 || y col - 1) return step; check[x][y] true; q.push({x,y}); } } } } return -1;//没找到出口 } };四.代码讲解一、数据结构与初始化bx[4]、by[4]方向数组表示上下左右四个方向的偏移量顺序不限。check[101][101]布尔数组用于标记格子是否已被访问过防止重复入队。typedef pairint,int PII简化坐标类型的书写。step整型变量记录当前 BFS 的层数即从起点出发已经移动的步数。二、主函数nearestExit获取迷宫尺寸和入口坐标row maze.size(); col maze[0].size();x entrance[0]; y entrance[1];初始化队列将入口坐标入队并标记为已访问check[x][y] true。BFS 层序遍历当队列非空时进入循环表示还有格子可以扩展。step每开始新的一层步数加 1表示从起点出发已经走了step步。int sz q.size();记录当前层的节点个数用于逐层处理。处理当前层所有节点 循环sz次依次取出队头坐标(a, b)。 对每个方向进行探索计算新坐标(x, y) (a bx[k], b by[k])。检查是否合法在网格范围内、未被访问、且是空格子maze[x][y] .。若满足条件则进一步判断如果新格子位于迷宫边界x 0 || x row-1 || y 0 || y col-1则说明找到了一个出口由于 BFS 按层扩散此时step即为最短步数直接返回step。否则将新格子标记为已访问并加入队列供下一层探索。循环结束若 BFS 结束后仍未返回说明没有可到达的出口返回-1。三、关键细节BFS 的层序性质BFS 第一次访问到某个格子时所用的步数就是最短距离。因此只要在扩展过程中遇到边界格子立即返回当前层数step保证结果是最小值。步数递增时机step放在每层开始之前表示进入下一层这样第一次扩展到的出口对应的步数就是正确的。入口不算出口代码在扩展时只检查新格子是否为边界且入口已经在初始时标记为已访问因此不会将入口本身误判为出口。五、流程图
3个核心模块解密:libwdi如何让Windows USB驱动安装从"玄学"变"科学" 【免费下载链接】libwdi Windows Driver Installer library for USB devices 项目地址: https://gitcode.com/gh_mirrors/li/libwdi
副标题:从设备识别到…
📅 2026/7/6 15:14:51
【本文章基于B站黑马程序员课程,课程链接:linux零基础快速入门到精通,个人进行自己适用的总结和归纳】
一.Linux入门
Linux组成
Linux系统主要由两部分组成:
Linux系统内核系统级应用程序 内核提供系统最核心的功能࿰…
📅 2026/7/6 15:12:50
本文是 Qwt 7.0 系列介绍和教程,如果你正在寻找一个高性能、协议友好、同时支持 2D 和 3D 绘图的 Qt 数据可视化库,那么这篇文章就是为你准备的。 系列总述文章:Qwt 7.0 —— 基于 Qt 的高性能 2D/3D 绘图库 概述 | 高性能曲线绘制 | 常用图表…
📅 2026/7/6 15:12:50
HcclThreadAcquireWithConfig 【免费下载链接】hcomm HCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm
产品支持情况
Ascend 950PR/Ascend 950DT&…
📅 2026/7/6 16:19:10
Instatic静态网站PWA功能测试:离线访问与推送通知完整指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic
Instatic是一个现代化的自托管…
📅 2026/7/6 16:19:10
VPS安全配置:Instatic服务器加固的7个关键步骤 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic
在数字化时代,自托管内容管理…
📅 2026/7/6 16:19:10
three.quarks TypeScript类型定义:提高代码质量与开发效率 【免费下载链接】three.quarks Three.quarks is a general purpose particle system / VFX engine for three.js 项目地址: https://gitcode.com/GitHub_Trending/th/three.quarks
three.quarks作为…
📅 2026/7/6 16:19:10
three.quarks粒子系统事件:监听与响应粒子生命周期事件 【免费下载链接】three.quarks Three.quarks is a general purpose particle system / VFX engine for three.js 项目地址: https://gitcode.com/GitHub_Trending/th/three.quarks
three.quarks是一个基…
📅 2026/7/6 16:19:10
智能解析下载工具:一键获取国家中小学智慧教育平台电子课本的终极方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内…
📅 2026/7/6 16:17:09
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray
你是否厌倦了Windows任务栏上密密麻麻的图标&…
📅 2026/7/6 0:01:19
1. 项目概述:一次对React Server Components核心安全机制的深度剖析 最近在安全研究圈里,CVE-2025-55182这个编号被频繁提及,它直指React生态中一个相对较新的概念——React Server Components(RSC)。作为一个长期关注…
📅 2026/7/6 0:01:20
星露谷物语终极MOD指南:5个步骤打造智能自动化农场 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods
你是否厌倦了在星露谷物语中重复收割、加工、存储的繁琐操作?梦…
📅 2026/7/6 0:01:20
1. 项目背景与核心需求 在嵌入式系统开发中,快速精确的数据检索是一个常见但极具挑战性的需求。特别是在工业控制、医疗设备和物联网终端等场景下,系统往往需要在毫秒级时间内完成关键参数的读取和写入操作。传统基于Flash存储的方案存在擦写次数有限、操…
📅 2026/7/6 10:35:30
1. 工业电流环信号传输的基础认知在工业自动化领域,4-20mA电流环传输技术已经持续服役超过半个世纪。这种看似简单的信号传输方式之所以能经久不衰,核心在于其独特的抗干扰能力——电流信号在长距离传输时几乎不受线路电阻和电压波动的影响。我曾在化工厂…
📅 2026/7/6 6:10:21
最近在项目里尝试用 YOLO 做目标检测,从环境搭建到模型训练,再到推理部署,整个过程踩了不少坑。网上的资料虽然多,但要么版本老旧,要么步骤零散不成体系,对于刚入门的新手来说,很容易卡在某个环…
📅 2026/7/6 5:35:58
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/6 6:10:28
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/6 6:10:26
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/5 23:45:08