(1)统计每个点入队的次数,如果某个点入队n次,则说明存在负环;
(2)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则说明存在环。
第一种方法的最坏时间复杂度是(O(n^2)就和bellman_ford算法一样)
第二种方法的最坏时间复杂度也是(O(n^2)),但是在大多数情况和比这个要小。
所以一般都用第二种方法来求。
(1)但是为了避免最坏的方法。可以使用strick的方法过掉数据:
就是判断所有点的总入队次数是否大于一个定值(比如2n,或者3n)的时候就直接判断有负环。
(2)也可以在知道存在负环的前提下,直接用栈stack来代替queue,这样能更快的求出负环。