最短路径 -- Dijkstra算法

定义一个有向图D=(V, A),对每一个弧a=(vi, vj),相应地有权ω(a)=ωij,又给定D中的两个顶点vs,vt。设P是D中从vs到vt的一条路径,定义路P的权是P中所有弧的权之和,记为ω§。最短路径问题就是要在所有从vs到vt的路中,求一条权最小的路,即求一条从vs到vt的路P0,使ω(P0)=min ω(P)
在Dijkstra算法中,用P(v),T(v)分别表示点v的P标号和T标号,Si表示第i步时,具P标号的点的集合。为了求出从vs到各点的距离的同时,也求出从vs到各点的最短路径,给每个点v以一个λ值,算法终止时,如果λ(v)=m,表示在从vs到v的最短路径上,v的前一个点是vm;如果λ(v)=M,表示D中不含从vs到v的路;λ(v)=0表示v=vs

Dijkstra算法具体步骤:

给定赋权有向图D=(V, A)。

开始(i=1)令S1={vs},P(vs)=0,λ(vs)=0,对每一个v != vs,令T(v)= ++,λ(v)=M,令k=s。
第一步:如果Si=V,算法终止,这时,对每个v∈Si,d(vs,v)=P(v);否则转入第二步。
第二步:考查每个使(vk, vj)∈A且vj !∈ Si的点vj。如果T(vj) > P(vk) + ωkj,则把T(vj)修改为P(vk) + ωkj,把λ修改为k;否则转入第三步。
第三步:令T(vj) = min vj !∈ Sj {T(vj)} 。
如果T(vji) < ++, 则把vji的T标号变为P标号P(vji) =T(vji) ,令Si+1=Si∪{vji},k=j,把i换成i+1,转入第一步;否则算法停止,这时对每一个v ∈ Si,d(vs,v)=P(v),而对每一个v !∈ Si,d(vs,v)=T(v)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值