最短路径问题 弗洛依德Floyd算法:带权图中每一对顶点间最短路径

编程入门 行业动态 更新时间:2024-10-09 04:25:02

<a href=https://www.elefans.com/category/jswz/34/1769359.html style=最短路径问题 弗洛依德Floyd算法:带权图中每一对顶点间最短路径"/>

最短路径问题 弗洛依德Floyd算法:带权图中每一对顶点间最短路径

A为存放图中所有顶点对之间的最短路径长度的n阶方阵。初始A为邻接矩阵,A=w。

取k=0,1,...,n-1,计算A[i][j]=min{A[i][j],A[i][k]+A[k][j]},(即vi到vj依次加入v0,v1,...vn-1,找最短路径)

P[n][n],P[i][j]保存顶点i到j的最短路径中i的直接后继

例子,如下图,求下图的每个点对之间的最短路径的过程如下:


第一步,先初始化两个矩阵,得到下图两个矩阵: (矩阵中v1...v7改为v0...v6),

初始时,D为邻接矩阵

P矩阵中的0代表v0,1代表v1..........

第二步,以v0为中阶,更新两个矩阵: 
发现,w[1][0]+w[0][6] =12+14=26< w[1][6]=无穷 和w[6][0]+w[0][1] =14+12=26< a[6][1]=无穷,所以只需要矩阵D和矩阵P,结果如下:

通过上矩阵P,发现v1–v6的最短路径是:v1–v0–v6

第三步:以v1作为中介,来更新两个矩阵,使用同样的原理,扫描整个矩阵,得到如下图的结果:

w[0][1]+w[1][2]=12+10=22<w[0][2]=无穷,故修改D[0][2]=22,P[0][2]=1(路径v0-v2中,v0的后继为v1)

w[2][1]+w[1][6]=10+26=26<w[2][6]=无穷,故修改D[2][6]=36,P[2][6]=1(路径v2-v6中,v2的后继为v1)


通过上矩阵P发现,v0-v2的最短路径为v0-v1-v2,

v2-v6的最短路径为v2-v1-v0-v6(因为:路径v2-v6中,v2的后继为v1,而v1–v6的最短路径是v1–v0–v6)

第四步,以v2为中介,更新D和P:


每次都会选择一个中介点,然后,遍历整个矩阵,查找需要更新的值,下面还剩下4步,就不继续演示下去了,理解了方法,我们就可以写代码了。



更多推荐

最短路径问题 弗洛依德Floyd算法:带权图中每一对顶点间最短路径

本文发布于:2024-02-06 17:57:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1750847.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最短   路径   顶点   图中   算法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!