spfa算法_C++详解

SPFA算法是一种求解最短路径的算法,能处理负边,但无法处理负环。文章介绍了SPFA的概念、特点、实现步骤,并提供了模板代码。通过举例说明了如何使用SPFA判断负环,包括根据节点入队次数和更新边数判断负环的方法。
摘要由CSDN通过智能技术生成

spfa定义

SPFA算法的全称是:Shortest Path Faster Algorithm,该算法是西南交通大学段凡丁于1994年发表的,它可以在O(kE)的时间复杂度内求出源点到其他所有点的最短路径,其中k为所有顶点进队的平均次数,可以证明k一般小于等于2,可以处理负边,但无法处理带负环的图(负环和负边不是一个概念)。

特点(优点)

spfa可以判断图中是否有负环,可以计算负边。

spfa概念

我们记源点为start,由源点到达点i的“当前最短路径”为dist[i],开始时将所有dist[i]初始化为无穷大,dist[start]则初始化为0。算法所要做的,就是在运行过程中,不断尝试减小dist[]数组的元素,最终将其中每一个元素减小到实际的最短路径。

实现具体操作

我们要维护一个队列,开始时将源点置于队首,然后反复进行这样的操作,直到队列为空:

1、取出队首元素,记为t,扫描所有与节点t直接相连的点
2、扫描过程中不断对扫描到的点(记为E)做松弛操作,松

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值