最短路径-FloydWarshall

如今的Floyd warshall算法是改进的Floyd,时间复杂度为O(n**3),现在也被主流称为的Floyd算法。

算法描述

Floyd-Warshall算法是在Floyd算法基础上的一个扩展,它可以处理带有负权边的图,而Floyd算法无法处理负权边。Floyd-Warshall算法通过动态规划的方式计算图中所有节点之间的最短路径。与单源最短路径算法(如Dijkstra或Bellman-Ford)不同,Floyd-Warshall算法是一种全源最短路径算法,因为它同时考虑了图中所有节点之间的路径。

算法流程

1. 初始化

(1) 创建一个二维数组dist,其中dist[i][j]表示节点i到节点j的最短路径长度。如果节点i和节点j之间没有直接连接的边,则dist[i][j]被设为无穷大(或一个足够大的值)。

(2) 对于每一条边(u,v),将dist[u][v]设置为边的权值。

2. 动态规划更新

(1) 对于每一个节点k,检查所有节点对(i, j),这里的k充当中间节点,检查是否存在一条路径从i经过k到达j而比当前已知的路径更短。

(2) 更新规则如下:dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j])

3. 迭代更新

重复上述动态规划步骤,逐步更新所有节点对之间的最短路径,直到所有节点都被考虑过为止。

4. 结果

当算法完成时,矩阵dist中存储的就是图中所有节点之间的最短路径长度。

算法样例

(1) 矩阵初始值为

(2) 接着第一次迭代:v1到v2之间的最短路径,比较v1-v2与v1-v3-v2,v1-v4-v2,其余点之间类似可以得到v4-v3>v4-v1-v3,得到

(3) 类似经过四次迭代可以得到最后:

(4) 输出结果

算法程序

暂无(有时间写)

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值