关于图ADT的一些算法——最短路径算法

带权的有向图,权值代表路径长度。

问题:计算从0开始到其他点的最小路径。

设一个备用的精选顶点集vertexSet,数组weight[v]保存顶点0到顶点v之间的最短路径。

 

                                                                                                  weight

步骤            v                    vertexSet                   [0]       [1]       [2]       [3]       [4]

1               0                          0                            0         8        无穷       9         4

2               4                         0,4                          0         8          5         9         4

3               2                        0,4,2                        0         7          5         8         4

4               1                        0,4,2,1                     0         7          5         8         4

5               3                       0,4,2,1,3                   0         7          5         8         4

 

表格及算法说明:

第一步:顶点集vertexSet包含顶点0,而weight数组中的值为从顶点0直接到v的路径长度;

第二步:不考虑已在顶点集中的0,weight[4]是weight中的最小值,将v=4添加到顶点集vertexSet中,对于不在顶点集中的顶点,即点u=1,2,3,检查weight{0->4->u}与weight[u]的大小,仅对于顶点2有weight[2]>weight[4]+weight{4->2}=4+1=5,故用5代替weight[2];

第三步:不考虑已在顶点集中的0,4,weight[2]在剩余的数中最小,故将v=2添加到顶点集vertexSet中,对于不在顶点集中的点u=1,3,检查weight[u]与weight{0->2->u}的大小,weight[1]=8>weight{0->2}+weight{2->1}=5+2=7,故用7替代weight[1];weight[3]=9>weight{0->2}+weight{2->3}=5+3=8,故用8代替weight[3];

第四步:不考虑已在顶点集中的0,4,2,weight[1]=7是最小的将v=1添加到顶点集vertexSet中,只有顶点3不在顶点集vertexSet中,比较得weight[3]=8<weight{0->1}+weight{1->3},故不变。

第五步:将最后一个点vertexSet添加到顶点集中,已没有其他数,算法结束。

 

 

 

参考文献:《Data Abstraction and Problem Solving with C++:Walls and Mirrors,3rd Edition》     Frank M.Carrano &Janet J.Prichard著 《数据结构与C++高级教程》田玉敏译   清华大学出版社

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值