数据结构与算法-100 days of learning-day2

有权图的单源最短路算法
具体例子如下**(找从源点v1到顶点v6的最短路)
在这里插入图片描述
图 7
在该图结构中,对于初始化的问题
,dist[v1]必定为0。而对于其余顶点来说,为了表示刚开始与源点v1不相关联,将它们的dist值均设为正无穷。如果设为其他值,就表明有路径将这两个顶点相连。而此时应该为初始状态,所以两个不同的顶点之间应无任何可通路径。而且如果设为其他固定值,在遍历某顶点的邻接点时就可能会出现问题。比如设置dist[v4]的初始值为-1,那么它的dist值有可能永远都是-1,路径是按照递增的顺序生成的,无法满足dist[V1]+E<V1,V4> < dist[V4]这个不等式。

如图7(a)所示,首先收录源点v1,接着开始遍历其邻接点,有v2和v4。分别得到dist[v2]=2,dist[v4]=1,并且记录其路径,即path[v2],path[v4]均为v1。此时v1的邻接点均被遍历,跳出该循环。继续执行外层循环结构,此时未被收录的顶点中,dist[v2]=2,dist[v4]=1,其余顶点的dist值均为正无穷。所以说此时未收录顶点中dist最小者为v4,则此时收录的顶点为v4。

接着如图7(b)所示,看它的邻接点是否均被遍历。如果没有被遍历,则看其dist是否能够被更新。
如图7(c)所示顶点v4的邻接点均未被遍历,同时它们也均满足不等式 dist[V]+E<V,W> < dist[W]。所以它们的dist值均被更新,且记录其路径。然后,跳出循环。
如图7(d)所示,排除被收录的v1和v4,未收录顶点中dist最小者为v2。其邻接点v4已经被遍历,所以不考虑。邻接点v5不满足不等式dist[V]+E<V,W> < dist[W],所以dist值不更新。同理,跳出循环后,未收录顶点中dist最小者有两个,分别为v3和v5。对于v3来说,其邻接点有v1和v6。因为v1被遍历过,所以看顶点v6,原来dist[v6]=9,但dist[V3]+E<V3,V6> =8,所以dist[v6]更新为8。

最后,如图7(d)所示,在v6和v7两个顶点当中,未收录顶点中dist最小者为v7。其邻接点只有v6,同理dist[V7]+E<V7,V6> =6<dist[v6],所以dist[v6]更新为6,并记录其途径V7。在找最短路径时,可以从终点v6不断向回退,比如顶点v6的上一个顶点为v7。同理可以得到v1到v6的最短路径为v1->v4->v7->v6。通过观察图7中每个环节下终点v6的dist和path值在不断变化,我们可以发现最短路径是在不断发生变化的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值