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

6.4.2_1最短路径问题_BFS算法

最短路径问题:

单源:一个源头出发到各个其他顶点最短路径 

BFS求无权图的单源最短路径:

无权图认为每个边之间的权值都为1,并不是无权

BFS广度优先遍历从2(单源)开始走一遍流程

广度优先遍历BFS解决无权图单源最短路径代码更改:

添加了2个数组,d[]用来记录各个顶点到原始顶点的最短记录的长度和path[]记录每个顶点在最短路径上的直接前驱(每个顶点从哪个顶点过来),把原BFS遍历的while循环中的visited访问代码改成了

过程如下:

单源为2顶点,即u=2,开始for循环把各个顶点到单源的最短记录长度d[]都初始化成∞,把path[]最短路径从哪个顶点过来设为-1,d[u]=0因为2顶点到2顶点路径长度为0,然后开始BFS访问2顶点,2入队,队列不为空进入for循环,2出队开始此时u=2,for循环求2的邻接边顶点w1和6,如果邻接边顶点w没被访问过,开始访问并且设置d[w]=d[u]+1,即下图中的1顶点到单源顶点的路径长度为d[1]=d[2]+1=1,因为是从2顶点直接过来的,即path[1]=u=2,6同,d[6]=1,path[6]=2,然后进行下一轮while循环,此时队头指针在1元素,1出队即u=1,进行查找1的邻接边顶点2和5,2已经被访问跳出for循环,5未被访问即开始访问并且d[5]=d[1]+1=1+1=2,path[5]=u=1,此时队列不为空,队头指针指向6元素,6出队,u=6开始for循环找6的邻接点2、3、7,2已被访问3、7未被访问,开始访问3,即w=3则设置d[]数组和path[]数组,d[w]=d[u]+1即d[3]=d[6]+1=1+1=2,path[w]=path[3]=u=6,3被访问并且入队,另外一个邻接点7没被访问开始访问7,w=7,d[7]=d[6]+1=2,path[7]=6,7被访问且入队,队列不为空开始进行下一轮while循环,队头元素为5,5出队则u=5,此时队头元素指向3,开始找5的邻接点1,1被访问过跳出for循环,队列不为空走下一轮while循环,3出队u=3,开始找3的邻接点4、6、7,6和7已被访问不再访问。。。。。。直到4和8顶点的所有邻接点都已被访问过不再访问d[]和path[]数组都被修改了

21653748

 

知识回顾:

如下最终得到了一个d[]和path[]的值,可以得到各个顶点与单源顶点的最短路径长度+路径序列,如顶点为8的到单源2的最短路径长度为d[8]=3,路径序列求法从当前顶点开始一直往前找path直到找到path的值为单源顶点的整个序列就是该顶点到单源的路径序列,如8顶点:8顶点对应的前驱path[8]=7,path[7]=6,path[6]=2,即找到了单源依次路径序列为8、7、6、2即8<-7<-6<-2(左朝向是因为是求单源到各个顶点的路径长度,所以让单源指向)

通过广度优先遍历可以得到一个广度优先生成树,树的每个节点在第几层也直接反映了2单源到各个顶点的距离,则如果是最短路径的话,通过广度优先遍历构造出来的生成树一定是高度/深度最小的

 

。。。。。。不知道有意义不。。。。。。。 

http://www.xdnf.cn/news/8783.html

相关文章:

  • 简单了解下Nacos
  • 【C语言指南】二维数组:概念、初始化与遍历
  • 5GC网络中的QoS Flow级QoS控制
  • Arduino Uno 热敏传感器实验
  • 防火墙高可用(HA)主备验证实验(eNSP)
  • 构造题(Constructive Problem)
  • ROS云课三分钟-阿克曼车式移动机器人倒车入库出库测试实验
  • python | vscode | 使用uv快速创建虚拟环境(实现一个项目一个虚拟环境,方便环境管理)
  • ADS学习笔记(三) 瞬态仿真
  • 【每天一个知识点】计算思维
  • java基础(面向对象高级部分)
  • [学习]浅谈C++异常处理(代码示例)
  • 2025.5.22 Axure 基础与线框图制作学习笔记
  • Linux中的文件系统和软硬连接
  • OpenGL环境配置
  • GAMES104 Piccolo引擎搭建配置
  • 【IPMV】图像处理与机器视觉:Lec12 Blob Detector 斑点检测
  • 进程通信-内存共享
  • 使用Java制作贪吃蛇小游戏
  • 历年福州大学保研上机真题
  • Java字符编码转换:从UTF-8到GBK的实现原理与实践
  • 【多线程】Java 实现方式及其优缺点
  • 智能语音通信新标杆——A-29P神经网络AI降噪回音消除模块深度解析
  • 【AI Study】第三天,Python基础 - 同NumPy类似的类库
  • Go语言中常见的6个设计模式
  • 2025-5-22Vue3快速上手
  • 华为OD机试真题—— 货币单位换算(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 把本地项目上传github上
  • 前端绘图基础——SVG详解
  • SprigBoot整合rocketmq-v5-client-spring-boot