图论part10 bellman_ford算法

  1. bellman_ford算法:对所有边进行松弛N-1次操作,求得目标最短路

卡码网94:寻找从节点1到节点n的最短路径并计算路径总权值,输出权值;不存在路径输出unconnected

  1. 松弛

状态一: minDist[A] + value 可以推出 minDist[B]

状态二: minDist[B]本身就有权值 (可能是其他边链接的节点B 例如节点C,以至于 minDist[B]记录了其他边到minDist[B]的权值)

对状态一二进行选择得过程就叫松弛

if (minDist[B] > minDist[A] + value) minDist[B] = minDist[A] + value

  1. 为什么松弛n-1次?

只要知道松弛一次得到的是到达和起点一条边相连得节点最短距离

到达节点n的最短距离就能通过松弛n-1次得到,同时还能得到到所有节点的最短距离

  1. 不能从未计算过路径的节点出发

  2. SFPA算法

适用队列优化bellman_ford,简单来记就是邻接表存图(维护边),BFS,并使用标记数组对目标节点进行标记,但是需要有取消标记的操作

  1. 判断负权回路,由该系列算法可知我们通过n-1次松弛可以得到从起点到任意一点的最少开销,如果存在负权回路,再继续松弛,就是沿着该回路绕圈,会使开销越来越小。判断方法就是松弛n-1次后在松弛一次看minDist数组有没有变化
相关推荐
智者知已应修善业15 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
划破黑暗的第一缕曙光16 小时前
[数据结构]:5.二叉树链式结构的实现1
数据结构
91刘仁德16 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
青桔柠薯片16 小时前
数据结构:单向链表,顺序栈和链式栈
数据结构·链表
diediedei16 小时前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI16 小时前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz120716 小时前
分治算法(c++)
c++·算法
XiaoFan01217 小时前
将有向工作流图转为结构树的实现
java·数据结构·决策树
睡一觉就好了。17 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
齐落山大勇17 小时前
数据结构——单链表
数据结构