当前位置: 首页 > news >正文

蓝桥杯---最短路径问题bfs

1.算法总括

最短路径问题:其实是隶属于我们的图论里面的这个部分的内容;

我们这个文章是使用的bfs方法找到这个最短的路径的,但是这个有一个前提就是这个边权是1,也就是这个图上面的每一条边对应的这个权重的数值是一样的,这个时候才满足我们的这个方法的使用条件;

bfs的话就是广度优先遍历,因此这个实际上上市我我们之前的那个解决洪水灌溉的这个思路基本上就是一致的,就是在一些地方需要处理一下;

首先需我们定义这个哈希表和队列,哈希表统计的是这个里面的对应位置是不是已经被遍历过了,队列的话就是对于这个遍历的结果进行存储的数据结构,其中这个队列里面的元素只有两个可能:入队或者是出队;

image-20250404164327533

2.题目概述

下面的这个题目比较复杂,我们直接去看这个题目下面给出来的这个案例进行解释吧:

image-20250404171647645

这个输入里面有maze和entrance其中这个entrance表示的就是这个人物当前所在的位置,我们需要做的就是找到距离这个位置最近的一个出口,这个就是最短路径问题,因为这个里面的每一步都是1个步长,所以这个题目是符合我们使用bfs这个方法的;

+表示的就是这个位置是墙壁,点表示的就是这个位置可以走,就是这个意思,也就是说图上面画出来的这个红色的区域都是无法走的;

上面的这个示例一里面是三个出口,只要是这个贴边的都是我们的出口,如果这个作为最开始的位置就在边缘的话,这个时候就没有生效,也就是说,不可以是0步长;

就是如果人物在下面的这个圆形的位置,这个时候你不可以说直接就出来了,这个时候有效的出口只有两个,他所在的那个位置就不是一个出口,只能选择另外的两个;

image-20250404174246835

3.思路分析

还是使用的这个bfs的方法,dx,dy表示的就是我们的这个遍历时候的上下左右,之前的那个洪水灌溉的题目也是使用的这个方法,不清楚的话,大家可以回去看一下这个思路;

接下来就是入队出队,一般都是取出来这个队头的元素,和这个元素相关联的元素添加到我们的队列里面去,我们需要定义这个m,n保证这个对应位置的坐标是不可越界的;

4.代码分析

1)定义队列和vis,vis表示的就是我们的这个位置有没有被遍历过,遍历过就是true,没有的话就是false,这个我们后面会使用到;

2)q.add就是把这个题目给定的这个位置的横纵坐标添加到我们的这个队列里面去;

3)step负责统计这个过程中的节点的数量,这个数值就是我们最后需要返回的这个最短的路径;

4)poll出队列之后,这个时候取出来他的横纵坐标,找到这个对应的上下左右位置,通过第22行的这个判断的条件,如果没有越界,并且符合这个出口的定义,我们就直接返回这个step,如果不符合,就把这个节点添加到我们的这个队列里面去,并且这个时候这个位置的节点已经遍历过了,所以这个vis对应的布尔值就是true,需要进行更新;

5)循环结束的时候,正常情况下就return了(23行的),如果可以走到这个30行这个就说明我们的这个里面没有符合条件的;

image-20250404171731232

[外链图片转存中…(img-K7XbR6NP-1743760321729)]

http://www.dtcms.com/a/111980.html

相关文章:

  • 【数据结构】邻接表 vs 邻接矩阵:5大核心优势解析与稀疏图存储优化指南
  • 三部门新政力推智能家居 居然智家数智化转型迎利好东风
  • YUV转RGBA的操作
  • 图解AUTOSAR_SWS_LINTransceiverDriver
  • 【嵌入式学习5】PyQt5模块介绍、创建第一个窗口
  • Linux安装启动ssh服务器以及ssh的配置
  • Leetcode 15 -- 双指针
  • Mysql 中的 MyISAM 引擎
  • 第十五届蓝桥杯单片机省赛程序设计试题
  • CSS 3D变换,transform:translateZ()
  • 从小米汽车事故反思 LabVIEW 开发
  • 专业的情商测评工具:EQ-i在线测评系统
  • Fastjson 处理 JSON 生成与解析指南
  • 31--当认证协议开始“选秀“:RADIUS、LDAP、AD与本地认证的C位之争
  • react redux的学习,多个reducer
  • drawio导出流程图为白色背景png图片
  • 对OSPF协议的LSA分析
  • Linux系统进程
  • AI 浪潮下企业身份管理:特点凸显,安全挑战升级
  • CMake学习-- install 指令详细说明
  • 11.多线程-信号量-线程池
  • AWS 云运维管理指南
  • ekf-imu --- 四元数乘法符号 ⊗ 的含义
  • SQLite 触发器
  • 深入解析CPU主要参数:选购与性能评估指南
  • ngx_alloc
  • 【2022】【论文笔记】基于相变材料的光学激活的、用于THz光束操作的编码超表面——
  • leetcode-代码随想录-哈希表-有效的字母异位词
  • 2007-2019年各省地方财政交通运输支出数据
  • 动物多导生理信号采集分析系统技术简析