dijkstra 算法 找图的最短路 单源最短路

基本思路是    一个path数组存路径  一个distance数组存距离   distance[k]表示 k结点到指定的初始结点的最短路   还要个collect数组收集已经被操作过的点

先初始化distance 把目标结点的子结点的距离放进去,其他的初始化为无穷大,  每次找d中未被收集到collection中的最小值,这是最重要的,有这步才能证明最后得到的是最短路,这步是贪心思想,每次找距离最小的未在collection里的结点来,保证最后得到的最小路径,这是被证明的,这步也保证了遍历所有的路径从而得到最小值,

具体体现在      比如  先对3结点操作,3结点到4结点来更新4的最短距离后,把3放进collect里  然后到5结点 它的子节点也有3 但是不用再去对3到5来更新5到目标点的最短距离了,因为5结点在后,它到目标点的距离必定比到3的距离大 而距离都是大于0的 所以不用去走这步了 所以必须要有 选最小这个思想 程序才对,所有路线才被考虑到,而且着步直接去掉了许多不用考虑的。  而且说明 有负值的 边权的图是不可以用这种算法的,因为找的最短路是错的,就是因为这儿。

 

转载于:https://www.cnblogs.com/-Finch-/p/7277319.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值