Bellman-Ford与SPFA判定负环

1.Bellmen-Ford判定负环

思路:

  • 若经过n轮迭代,算法仍未结束(仍有能产生更新的边),则图中存在负环
  • 若n – 1轮迭代之内,算法结束(所有边满足三角不等式),则图中无负环

2.SPFA判定负环

思路:

  1. 设cnt[x]表示从1到x的最短路径包含的边数,cnt[1] = 0。当执行更新dist[y] = dist[x] + z 时,同样更新cnt[y] = cnt[x] + 1。若此时发现cnt[y] >= n,则图中有负环,若算法正常结束则不存在负环。
  2. 另一种方法是记录每个点的入队次数,次数达到n时说明有负环。

两种方法的比较:一般情况下第二种方法的效率不如第一种的高,例如在n个点构成一个负环的图中,第一种的判定方法只要绕行一次,就能发现负环,而第二种方法要绕环n次。

例题:POJ3259

《算法竞赛进阶指南——李煜东》P361

    原文作者:Bellman - ford算法
    原文地址: https://blog.csdn.net/weixin_41162823/article/details/82107028
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞