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

相关推荐
夜思红尘4 小时前
算法--双指针
python·算法·剪枝
散峰而望5 小时前
【算法竞赛】C++函数详解:从定义、调用到高级用法
c语言·开发语言·数据结构·c++·算法·github
CoderCodingNo5 小时前
【GESP】C++五级真题(贪心思想考点) luogu-B4071 [GESP202412 五级] 武器强化
开发语言·c++·算法
我有一些感想……5 小时前
An abstract way to solve Luogu P1001
c++·算法·ai·洛谷·mlp
前端小L5 小时前
双指针专题(三):去重的艺术——「三数之和」
javascript·算法·双指针与滑动窗口
智者知已应修善业6 小时前
【求等差数列个数/无序获取最大最小次大次小】2024-3-8
c语言·c++·经验分享·笔记·算法
LYFlied6 小时前
【每日算法】LeetCode 416. 分割等和子集(动态规划)
数据结构·算法·leetcode·职场和发展·动态规划
多米Domi0117 小时前
0x3f 第19天 javase黑马81-87 ,三更1-23 hot100子串
python·算法·leetcode·散列表
历程里程碑7 小时前
滑动窗口最大值:单调队列高效解法
数据结构·算法·leetcode
課代表7 小时前
从初等数学到高等数学
算法·微积分·函数·极限·导数·积分·方程