利用迪杰斯特拉算法求某一顶点到其余各顶点的最短路径

【迪杰斯特拉算法思想】

      设有两个顶点集合S和T,集合S中存放图中已找到最短路径的顶点,集合T存放图中剩余顶点。初始状态下,集合S中只包含源点V0。然后不断从集合T中选取到顶点V0路径长度最短的顶点Vu并入集合S中。集合S中每次并入一个新的顶点Vu后,都要修改顶点V0到集合T中顶点的最短路径长度值。不断重复此过程,直到集合T中的顶点全部并入集合S中为止。

【深入理解】

      当集合T中的顶点Vu并入集合S中时,Vu被确定为最短路径上的顶点,此时Vu就像V0到达集合T中顶点的中转站,即从V0到集合T中顶点的路径条数随着顶点Vu从集合T并入到集合S中后会增加,而这些新出现的路径很有可能比原有的V0到集合T中的顶点的路径长度小,因此需要修改原有V0到集合T中的其他顶点的路径长度。对于此时集合T中的顶点Vk来说,V0不经过Vu到Vk的路径长度(即原有的路径长度)为a,另一种是V0经过Vu到Vk的路径长度(即新的路径长度)为b。此时存在两种情况:

第一:a <= b。此时什么都不做。

第二:a > b。则用b来代替a作为V0到Vk的路径长度。

【实现迪杰斯特拉算法的辅助数据结构】

      为了实现迪杰斯特拉算法,需要用到3个辅助数组:dist[]、path[]和set[]。

      dist[Vi]表示当前已找到的从V0到每个终点Vi的最短路径长度。初始状态:若从V0到Vi有边,则dist[Vi]为边上的权值,否者置dist[Vi]为无穷大。

      path[Vi]中保存V0到Vi最短路径

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值