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)

相关推荐
Tisfy25 分钟前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH1 小时前
P5025 [SNOI2017] 炸弹
c++·算法
A boy CDEF girl1 小时前
算法题专栏:优选算法
数据结构·算法·leetcode
没落之王2 小时前
三易五行看宋朝的三界确立
大数据·人工智能·算法
坤坤子吖2 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
Js.Tx4 小时前
【具体数学 Concrete Mathematics】2.1.5 一般性的方法
算法·具体数学
秋天的怀念_David5 小时前
算法一千零一夜 · 作品相关:版权与致谢声明
程序人生·算法·学习方法
揽星河..6 小时前
【C语言】数组
c语言·开发语言·算法
careathers6 小时前
【数据结构】基于比较的排序算法 - 选择排序
数据结构·算法·排序算法
听风若依6 小时前
C++模板初阶
c++·算法