首先定义数组 \(d_i\) 表示起点到 \(i\) 的距离(除起点外初始化为最大值),并维护一个队列。
初始将起点入队,然后每一次取队头 \(x\) 并且松弛所有与 \(x\) 相连的边,同时如果能够更新\(d_v\) 且 \(v\) 不在队内,就将其入队,由于每一次入队 \(d_v\) 都会变小,所以必然能找到最优解。令 \(n\) 为点数,如果一个点 \(x\) 入队了超过 \(n\) 次,说明该点最少被某个点更新了两次,也就是说必然存在一个点 \(u\) ,使得从 \(u,x\) 出发绕一圈,回到 \(x\) 的同时距离还变小了,说明图中有负环,也就必然不存在最短路
标签:一个点,变小,简述,入队,SPFA,算法,起点 From: https://www.cnblogs.com/WhangZjian/p/16770200.html