基于SPFA
(1)统计每个点入队的次数,如果某个点入队n次,则说明存在负环
(2)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数>=n,则也说明存在环
所有点加入队列
所有点dist[i]=0;
小trick1 spfa算法很有可能会超时,这时候可以:
当所有点的入队次数超过2n时,我们就认为图中有很大可能是存在负环的
trick2 提高找负环效率:把队列改成栈存储