- SPFA是优化的Bellman-Ford算法
Bellman-Ford算法每轮操作都要遍历所有的边,这其中有许多无效的操作。只有当某个顶点u的d[u]值改变时,从它出发的边的邻接点v的d[v]值才有可能被改变。
SPFA算法的伪代码
queue<int> q;
源点s入队;
while(队列非空)
{
取出队首元素;
for(u的所有邻接边u->v)
{
if(d[u] + dis < d[v])
{
d[v] = d[u] + dis;
if(v不在当前队列)
{
v入队;
if(v入队次数大于n-1)
{
说明有可达负环,return;
}
}
}
}
}