迪克斯特拉算法详解及C++实现

算法步骤如下:
G={V,E}
1. 初始时令 S={V0},T=V-S={其余顶点},T中顶点对应的距离值
若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值
若不存在<V0,Vi>,d(V0,Vi)为∞
2. 从T中选取一个与S中顶点有关联边且权值最小的顶点W,加入到S中
3. 对其余T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值
4. 缩短,则修改此距离值
重复上述步骤2、3,直到S中包含所有顶点,即W=Vi为止
Dijkstra算法适用于边权为正的情况。下面直接给出Dijkstra算法的伪代码,它
可用于计算正权图上的单源最短路(Single-Source Shortest Paths,SSSP),
即从单个源点出发,到所有结点的最短路。该算法同时适用于有向图和无向图。
清除所有点的标号
设d[0]=0,其他d[i]=INF
循环n次 {
在所有未标号结点中,选出d值最小的结点x
给结点x标记
对于从x出发的所有边(x,y),更新d[y] = min{d[y], d[x]+w(x,y)}
}
下面是伪代码对应的程序。假设起点是结点0,它到结点i的路径长度为d[i]。未标
号结点的v[i]=0,已标号结点的v[i]=1。为了简单起见,
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值