最短路径问题( 贝尔曼-福特算法 SPFA算法)

1.贝尔曼—福特算法(Bellman-Ford)

贝尔曼-福特算法是一种用于解决带有负权边的单源最短路径问题的算法。它是以其发明者之一理查德·贝尔曼和鲍曼·福特命名的。
该算法的基本思想是从源节点开始,通过不断迭代更新节点的最短路径值,直到找到所有节点到源点的最短路径。算法中使用数组来存储每个节点的最短路径值,并通过逐步松弛每条边来更新这些值。

具体步骤如下:
1.初始化:将源节点的最短路径设为0,其他节点的最短路径值设为 ∞ ∞
2.对于每个节点,依次遍历所有的边,进行松弛操作:如果通过当前节点可以获得更短的路径,则更新该节点的最短路径值(如果dst[v] < dst[u] + w,则dist[v] = dst[u] + w)。
3.如果遍历中有节点被更新,那么重复执行第2步,直到没有发生任何节点最短路径估计值的更新为止。
4.如果已经进行N-1次遍历后还需要遍历,则证明这个图有负环
5.在执行完所有的迭代之后,如果存在负权环,算法将会报告该图中存在负权环。否则,最终得到的距离数组即为每个节点到源节点的最短路径值。

Bellman-Ford算法

贝尔曼-福特算法的时间复杂度为O(NM),其中N是节点数M是边数。由于需要遍历所有节点和边,因此该算法适用于稀疏图或者边数较少的情况
贝尔曼-福特算法不能处理存在负权环的图。如果存在负权环,则最短路径可能不存在或者具有无限小的长度。在实际应用中,可以通过检测负权环来判断图是否具有最短路径

实现

vector<int> dst(n+1,INF)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangyuxuan1029

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值