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)做松弛操作,松