SPFA算法思想简述

首先定义数组 \(d_i\) 表示起点到 \(i\) 的距离(除起点外初始化为最大值),并维护一个队列。

初始将起点入队,然后每一次取队头 \(x\) 并且松弛所有与 \(x\) 相连的边,同时如果能够更新\(d_v\)\(v\) 不在队内,就将其入队,由于每一次入队 \(d_v\) 都会变小,所以必然能找到最优解。令 \(n\) 为点数,如果一个点 \(x\) 入队了超过 \(n\) 次,说明该点最少被某个点更新了两次,也就是说必然存在一个点 \(u\) ,使得从 \(u,x\) 出发绕一圈,回到 \(x\) 的同时距离还变小了,说明图中有负环,也就必然不存在最短路

posted @ 2022-10-08 20:57  万航之舰  阅读(30)  评论(0)    收藏  举报