求负环的常用方法,基于SPFA
(1)统计每个点入队的次数,如果某个点入队n次,则说明存在负环;
(2)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数大于等于n,则说明存在环。
一些小技巧
1.一般我们都会选用第二种方法,因为在一些特殊情况下,第一个时间复杂度为很高。例如图为一个环,如果我们要统计每个点的入队次数,那时间复杂度将会是o($n^2$),但如果是第二种那就会是o(n);
2.有些情况下,时间复杂度过高时,我们考虑使用这个优化,有风险!!!
当所有点的入队次数超过2n时,我们就认为图中有很大可能存在负环。