Floyd - Warshall (弗洛伊德算法)

图中任意两点之间的最短路径问题

Dijkstra和Bellman-Ford也可以以所有点为源点,求出任意两点之间的最短距离,但是Dijstra不能解决带负权的的边,Bellman-Ford 效率慢点

Floyd算法考虑的是一条最短路径的中间节点,即简单路径p={v1 , v2, ... ,vn}上除v1和vn的任意节点

设K是p的一个中间节点,那么从i到 j 的最短路径就被分成 i到 k 和 k 到 j 的两段最短路径p1和p2,p1是从 i到 k且中间节点属于 {1 ,2 ,... , k-1}取得的一条最短路径,p2是从k到 j 且中间节点属于{1 , 2 , ... ,k-1}取得的一条最短路径

Floyd-Warshall算法的原理是动态规划

设Di,j ,k为从i到j的只以(1..k)集合中的节点为中间节点的最短路径长度

1.若最短路径经过点k ,则Di,j,k = Di,k ,k-1 + Di,j ,k-1

2.若最短路径不经过点k,则Di,j,k=Di,j,k-1

因此 , Di,j,k = min(Di,k ,k-1 ,Di,j ,k-1 + Di,j,k-1

相关推荐
故事和你919 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__9 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__9 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程10 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
_日拱一卒10 小时前
LeetCode:2两数相加
算法·leetcode·职场和发展
py有趣10 小时前
力扣热门100题之零钱兑换
算法·leetcode
董董灿是个攻城狮10 小时前
Opus 4.7 来了,我并不建议你升级
算法
无敌昊哥战神11 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__11 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode