目录
- 引入1:单源最短路
- 原理&讲解
- 模拟&代码
- 引入2:判正(负)环
- BFS版SPFA
- DFS版SPFA
- 例题
- 总结
- 后话
SPFA算法是一种图论算法,可以看作是Bellman-Ford算法的队列优化。它可以求出单源最短路,也可检测到负环,实现起来也比较容易。但是现在很多题目会卡SPFA,所以要看情况使用。
引入1:单源最短路
问:求带权有向图上一个源点到其他点的最短路径距离
如果没有非负边权,我们自然可以想到dij。但是如果有负边权呢?这时候就要用SPFA算法求解。
原理&讲解
用dis数组记录源点到有向图上任意一点距离,其中源点到自身距离为0,到其他点距离为INF。将源点入队,并重复以下步骤:
- 队首x出队
- 遍历所有以队首为起点的有向边(x,i),若dis[x]+w(x,i)<dis[i],则更新dis[i]
- 如果点i不在队列中,则i入队
- 若队列为空,跳出循环;否则执行1
实际上我们可以将其理解为bfs
如果图是随机生成的ÿ