算法流程:![](https://img-blog.csdnimg.cn/0eb6e1c2e7b84425872baca2a89bb22f.png)
关于spfa判断正负环:
注:N为点的数量,M为边的数量
Bellman_Ford在求解最短路时,如果A->B,那么只有dist[A]被更新了以后,dist[B]才有必要被更新,但Bellman_Ford无论如何,都对每条边进行N- 1次松弛操作。
Spfa针对这一点进行优化,如果松弛操作使某个点改变,且这个点不在队列中,就加进队列中。
总共有n个点,因为如果cnt[j] >= n有大于等于n条边时,则证明有n + 1个点,根据抽屉原理说明这条路径有一个点被经过了两次,则成环
可以用这个方法在求最短路的过程中判断负环
因为是在dist数组更新时cnt[]才更新所以说明这个一定是负权环才会导致dist[]变小
求正环同理,转换成最长路即可
SPFA(Shortest Path Faster Algorithm)是一种基于贪心思想的最短路径算法,它可以用于求解带有负权边的图中的单源最短路径问题。在一般的图中,如果存在负权边,那么可能存在负环。负环指的是图中一个环路,使得环路上