图论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数组有没有变化
相关推荐
Croa-vo10 小时前
Citadel SDE 面试复盘:直面硬核算法与思维挑战的双重压力
算法·面试·职场和发展
仰泳的熊猫10 小时前
1013 Battle Over Cities
数据结构·c++·算法·pat考试
_OP_CHEN11 小时前
算法基础篇:(七)基础算法之二分算法 —— 从 “猜数字” 到 “解难题” 的高效思维
c++·算法·蓝桥杯·二分查找·acm·二分答案·二分算法
一匹电信狗11 小时前
【C++11】Lambda表达式+新的类功能
服务器·c++·算法·leetcode·小程序·stl·visual studio
在等晚安么11 小时前
力扣面试150题打卡
算法·leetcode·面试
AI科技星12 小时前
宇宙膨胀速度的光速极限:基于张祥前统一场论的第一性原理推导与观测验证
数据结构·人工智能·经验分享·python·算法·计算机视觉
EXtreme3512 小时前
C语言指针深度剖析(2):从“数组名陷阱”到“二级指针操控”的进阶指南
c语言·开发语言·算法
luoganttcc12 小时前
介绍一下 机器人坐标转换的 RT 矩阵
算法
草莓火锅13 小时前
用c++求第n个质数
开发语言·c++·算法
snakecy13 小时前
自然语言处理(NLP)算法原理与实现--Part 1
人工智能·算法·自然语言处理