Bellman—Ford算法

贝尔曼-福特算法是求解包含负权边的单源最短路径问题的解决方案,由贝尔曼和福特提出。算法通过k次迭代找到最多不经过k条边的最短路径,并能检测负环。它通过松弛操作不断更新节点距离,每次外层循环扩展一个点,最终得到最短距离。
摘要由CSDN通过智能技术生成

介绍

贝尔曼-福特算法(Bellman-Ford)是由理查德·贝尔曼(Richard Bellman) 和 莱斯特·福特 创立的,是求解单源最短路径问题的一种算法。时间复杂度为O(nm),他可以解决边权为负数时的最短路问题(Dijkstra算法不可以),当然还有SPFA算法(实际上是Bellman—Ford算法的优化)。该算法的特别用处是通过k次迭代,得到从源点到终点最多不经过k条边的的最短路径。也可以用于是否存在负环,但一般用SPFA算法判断师傅存在负环。

原理,思路

主要由两层循环实现,外层循环k次代表源点到终点最多不经过k条边的最短路径,内层循环则历所有的边。初始时源点的距离为dist[1]=0,内层循环每遍历一条边就是对这条边进行一次“松弛操作”,即假设现在有一条从a指向b的边,权重为w,“松弛操作”就是检查此时的dist[b]和dist[a]+w哪个更小,即满足dist[b]<=dist[a]+w;简单的来说就是看从源点到b的距离短还是从源点经过a这个"中转点"再到b的距离短。需要注意的是,用来中转的a点的dist

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值