bellman-ford算法学习

学算法就是学了忘,忘了学的过程。。。。

哎!

今天想看给旅行商问题找个模板,就看到了spfa算法,然后就到了bellman-ford算法,发现又忘记这个算法思想了。

原来的dijkstra算法是只能处理权重为非零的边的有向图,得到单源最短路(从一个顶点出发到其他顶点的最短路)

bellman-ford算法能处理一般情况(带负边)

算法思想是  将点分为两个集合,一类是已经得到最短路的点的集合S,另一类是得到的当前最短路的点的集合U

S最开始是只有出发点V0的集合,然后将V0到U中的点的距离最短的点X取出,将X放入S中,这个路径长度就是V0到X的最短路,

然后用x最作为中间节点去更新V0到U中各个点的路径长度。直到U为空集。

其实很好理解  V0 作为起点, 有V1到Vn n个点, 如果V0到 V1的路径长度是当前最短的了,那么不可能有任何一个顶点作为中间节点使得 V0-V1 大于 V0-Vx +Vx-V1   因为V0-V1 小于任何 V0-Vn  (因为上面画红字的语句)

思路其实很简单

代码实现

回去看着算法书写百度感觉没找到靠谱的。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值