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

相关推荐
墨染点香14 分钟前
LeetCode 刷题【160. 相交链表】
算法·leetcode·链表
少睡点觉15 分钟前
LeetCode 238. 除自身以外数组的乘积 问题分析+解析
java·算法·leetcode
大千AI助手27 分钟前
多叉树:核心概念、算法实现与全领域应用
人工智能·算法·决策树·机器学习··多叉树·大千ai助手
一只老丸30 分钟前
HOT100题打卡第38天——贪心算法
算法·贪心算法
普通网友32 分钟前
高性能TCP服务器设计
开发语言·c++·算法
醒过来摸鱼33 分钟前
9.12 sinc插值
python·线性代数·算法·numpy
普通网友38 分钟前
C++与硬件交互编程
开发语言·c++·算法
liliangcsdn41 分钟前
EnsembleRetriever中的倒数融合排序算法
算法·排序算法
HUTAC44 分钟前
重要排序算法(更新ing)
数据结构·算法
虹科测试测量2 小时前
德思特干货 | 单通道、多通道衰减器与衰减矩阵:如何选择合适的衰减方案
服务器·测试工具·算法·矩阵