Dijkstra算法

Dijkstra算法

技巧:把已经发现的从起点a能够抵达点P的距离作为最短距离(未知)的上限d保存起来,记录为P(d), 后期发现能够更小的话,就更新这个点的参数值d,直到不能再更新为止。

二. 最短路问题

问题:给定简单权图G = (V, E),并设G 有n个顶点,求G中点u0到其它各点的距离。

(1) 置 l(u0) = 0;对所有v∈V {u0},令 l(v) = ∞; S0 = {u0},i = 0。
(2) 若i = n-1,则停;否则令 Si= V \Si 对每个v∈Si,令 l(v) = min {l(v),l(ui) + w(uiv)}

在这里插入图片描述
(4)并用 ui+1记达到最小值的某点。置Si+1= Si∪{ui+1},
i = i+1(表示赋值语句,以后的算法中相同),转(2)。

基本思想
通过Dijkstra计算图G中的最短路径时,需要指定起点u0(即从顶点u0开始计算)。

此外,引进两个集合S和S^-。S的作用是`记录已求出最短路径的顶点`(以及相
应的最短路径长度),而S^-则是记录`还未求出最短路径的顶点`(以及该顶点
到起点u0的距离)。

初始时,S中只有起点u0;S^-中是除u0之外的顶点,并且S^-中顶点的路径是
”起点u0到该顶点的路径”。然后,`从S^-中找出路径最短的顶点,并将其嫁
入S中(即PPT中第(4)步的Si+1及ui+1的赋值);`接着,更新S^-中的顶点
和顶点对应的路径。 然后,再从S^-中找出路径最短的顶点,并将其嫁入S中
;接着,更新S^-中的顶点和顶点对应的路径。 … 重复该操作,直到遍历完
所有顶点。

注:`纳入S集合后,路的距离就从“估计值”变为了“确定值”,后面都是更新
S^-的元素`

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
参考:Dijkstra算法详细讲解

解题操作实例:
在这里插入图片描述
图 2 中 S 到 T 的最短路的长度为_______ .

解:

1.在这里插入图片描述

2.在这里插入图片描述
动图:
在这里插入图片描述

在这里插入图片描述
动图:在这里插入图片描述
注:
  这次选取的点的值,虽是最小,却不是被更新的点。一定是由过去选择的另一条路径的接续得到的。
  B点的上次更新是由S更新,所以,S点是B的前驱点

4.在这里插入图片描述
动图:在这里插入图片描述
注:
  这次选取的点的值,虽是最小,却不是被更新的点。一定是由过去选择的另一条路径的接续得到的。
  D点的上次更新是由A更新,所以,A点是D的前驱点

5.在这里插入图片描述
动图:在这里插入图片描述

6.在这里插入图片描述
动图:在这里插入图片描述
注:
  这次选取的点的值,虽是最小,却不是被更新的点。一定是由过去选择的另一条路径的接续得到的。
  C点的上次更新是由B更新,所以,B点是C的前驱点

7.在这里插入图片描述
在这里插入图片描述
注:
  这次选取的点的值,虽是最小,却不是被更新的点。一定是由过去选择的另一条路径的接续得到的。
  F点的上次更新是由B更新,所以,B点是F的前驱点

8.在这里插入图片描述
在这里插入图片描述

所有走过的动作汇总 :{SA,SB,AD,DE,BC,BF,FT}

总的过程:(S–>B–>F–>T是S到T的最短路径,注:可以由T为终点,回溯这条路径的形成。)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值