单源最短路径问题

单源最短路径问题

  • 解决方案:Dijkstra提出按各顶点与源点v间的路径长度的递增次序,生成到各顶点的最短路径的算法。既先求出长度最短的一条最短路径,再参照它求出长度次短的一条最短路径,依次类推,直到从源点v 到其它各顶点的最短路径全部求出为止。
  • 问题的提出: 给定一个带权有向图G与源点v,求从vG中其它顶点的最短路径。限定各边上的权值大于或等于0

求单源最短路径的具体步骤

将图G中所有的顶点V分成两个顶点集合ST。以v为源点已经确定了最短路径的终点并入S集合中,S初始时只含顶点v,T则是尚未确定到源点v最短路径的顶点集合

求单源最短路径的具体步骤

1、选一顶点v为源点,并视从源点v出发的所有边为到各顶点的最短路径(确定数据结构:因为求的是最短路径,所以①就要用一个记录从源点v到其它各顶点的路径长度数组dist[],开始时,dist[i]是源点v到顶点i的直接边长度,即dist中记录的是邻接阵的第v行。②设一个用来记录从源点到其它顶点的路径数组path[],path[i]中存放路径上第i个顶点的前驱顶点)

2、在上述的最短路径dist[]中选一条最短的,并将其终点(既v,k>k加入到集合s

3、调整T中各顶点到源点v的最短路径。 因为当顶点k加入到集合s中后,源点vT中剩余的其它顶点j就又增加了经过顶点k到达j的路径,这条路径可能要比源点vj原来的最短的还要短。调整方法是取dist[k]+g->adges[k][j]dist[j]的较小者

4、再选出一个到源点v路径长度最小的顶点k,T中删去后加入S中,再回去到第三步,如此重复,直到集合S中的包含图G的所有顶点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值