简述dijkstra算法原理_Dijkstra算法原理及证明(转)

算法:

设G是带权图,图中的顶点多于一个,且所有的权都为正数。本算法确定从顶点S到G中其他各个顶点的距离和最短通路。在本算法中P表示带永久标记的顶点的集合。顶点A的前驱是P中的一个顶点,用来标记A。顶点U和V之间的边的权重用W(U,V)表示,如果U和V之间没有边,则记作W(U,V)=∞.

步骤1 (对S做标记)

(a)将S标记为0,并使S没有前驱

(b)令P={S}

步骤2 (对其他顶点作标记)

将每个不在P中的顶点V标记为W(S,V)(可能是暂时的),并使V的前驱为S(可能是暂时的)

步骤3 (扩大P,修改标记)

Repeat

步骤3.1 (是另一个标记永久化)

把不在P中且带有最小标记的顶点U加入到P中去(如果这样的顶点有多个则任选其中一个)

步骤3.2  (修改临时标记)

对每个不在P中并且和U相邻的顶点X,把X的标记替换为下列这两者中的较小者:i)X的旧标记,ii)U上的标记与W(U,X)之和。如果X的标记改变了,则使U成为X的新前驱(可能是暂时的)

Until P包含G中的每一个顶点

步骤4 (求出距离和最短通路)

顶点Y上的标记是从S到Y的距离。如果Y上的标记是∞,那么从S到Y就没有通路,从而

没有最短通路;否则,按照下列序列的逆序使用顶点就构成从S到Y的一条最短通路:

Y,Y的前驱,Y的前驱的前驱,。。。。,直至S

证明:Dijkstra算法给出了从S到G的各个顶点的最短通路长度。

我们假设࿲

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值