关于dijkstra的一点总结

最近的一段时间都在刷关于dijkstra的东西 ,在参看了白书等参考之后 ,我个人做了点小总结。首先要明确的是dijkstra的最主要用途是求单源最短路径的(权值非负)。所谓单源最短路径就是固定一个顶点为源点,然后求源点到其他点的最短路径。(需要特别注意的是 源点不一定是图中标明的起点,有时候出题者经常会反着来,这时候就需要用反的dijkstra来做,即将终点当源点向多个起点来辐射)

算法的思想:从顶点v0到vk的最短路径,要么是从v0到vk的直接路径,要么就是从v0经过某个顶点vi再到vk的路径。

具体实现方法:

1、设置两个顶点的集合T和S S中存放已经找到的最短路径的点,初始时只有一个顶点,既源点v0。T中存放的是还未找到最短路径的点。

2、在T中选取当前长度最短的一条路径(v0……vk),从而将vk加入S中,并修改源点v0到T中各个顶点的最短路径长度;重复这一步骤,直到所有的顶点都加入S中,算法结束。

算法实现:

一般有几个常用的数组。

dist[i]:表示当前找到的从源点v0出发到vi的最短路径的长度。初始 时,dist[i]为edge[vo][i],既邻接矩阵的第v0行。

s[n]:s[i]为0表示顶点vi还未加入集合s中,为1表示已加入。初始时,s[v0]为1,其他的都为0.

path[n]:path[ i ]表示v0到vi的最短路径上顶点vi的前一个顶点序号。用来记录最短路径的。

递推公式:

初始: dist[k]=edge[v0][k],v0是源点

递推:u=min{dist[i]},

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值