首页 > 其他 > 详细

初探Floyd和Dijkstra

时间:2020-03-03 19:15:48      阅读:80      评论:0      收藏:0      [点我收藏+]

Floyd:

问题:Floyd算法求解下图各个顶点的最短距离

 技术分享图片

 

解析:

从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,算法假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,算法检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离

 

核心代码:

技术分享图片
for(u = 0; u < G.vexnum; ++ u)
    for(v = 0; v < G.vexnum; ++ v)
        for(w = 0; w < G.vexnum; ++ w)
            if(D[v][u] + D[u][w] < D[v][w])// 从v经u到w的一条路径更短
                D[v][w] = D[v][u] + D[u][w];
View Code

 

 

Dijkstra:

问题:用Dijkstra算法求由顶点a到顶点b的最短路径

技术分享图片

 

解析:

①    不断运行广度优先算法找可见点,计算可见点到源点的距离长度

②    从当前已知的路径中选择长度最短的将其顶点加入S作为确定找到的最短路径的顶点。

 

a

b

c

d

e

f

g

h

A

0

1

2

B

0

2

C

2

0

D

1

0

8

E

2

0

2

F

2

0

G

3

0

3

h

2

0

 

 

 

 

 

初探Floyd和Dijkstra

原文:https://www.cnblogs.com/zhhhb/p/12403899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!