基于SPFA

(1)统计每个点入队的次数,如果某个点入队n次,则说明存在负环

(2)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数>=n,则也说明存在环

所有点加入队列

所有点dist[i]=0;

小trick1 spfa算法很有可能会超时,这时候可以:

当所有点的入队次数超过2n时,我们就认为图中有很大可能是存在负环的

trick2 提高找负环效率:把队列改成栈存储