有向图最长路径算法_【洛谷日报#16】SPFA算法教学

本文介绍了SPFA算法在有向图中最短路的求解,包括算法原理、模拟过程及代码实现。此外,文章讨论了SPFA用于判断正负环的方法,并给出了BFS和DFS版本的SPFA判环思路。同时,通过例题解释了如何运用SPFA解决实际问题,强调了在非负权图中Dijkstra算法的优势。
摘要由CSDN通过智能技术生成

3e2d68c0f42175998c5718b8e749a2c6.png

目录

  • 引入1:单源最短路
  • 原理&讲解
  • 模拟&代码
  • 引入2:判正(负)环
  • BFS版SPFA
  • DFS版SPFA
  • 例题
  • 总结
  • 后话

SPFA算法是一种图论算法,可以看作是Bellman-Ford算法的队列优化。它可以求出单源最短路,也可检测到负环,实现起来也比较容易。但是现在很多题目会卡SPFA,所以要看情况使用。


引入1:单源最短路

问:求带权有向图上一个源点到其他点的最短路径距离

如果没有非负边权,我们自然可以想到dij。但是如果有负边权呢?这时候就要用SPFA算法求解。

原理&讲解

用dis数组记录源点到有向图上任意一点距离,其中源点到自身距离为0,到其他点距离为INF。将源点入队,并重复以下步骤:

  1. 队首x出队
  2. 遍历所有以队首为起点的有向边(x,i),若dis[x]+w(x,i)<dis[i],则更新dis[i]
  3. 如果点i不在队列中,则i入队
  4. 若队列为空,跳出循环;否则执行1

实际上我们可以将其理解为bfs

如果图是随机生成的ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值