版权声明:本博客主要用于记录思考过程,方便复习,欢迎留言交流讨论~ https://blog.csdn.net/Floraqiu/article/details/81988810
bool SPFA(int s)
{
queue<int> Q;
memset(inq, 0, sizeof(inq));
memset(cnt, 0, sizeof(cnt));
memset(d, INF, sizeof(d));
d[s] = 0;
inq[s] = true;
Q.push(s);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
inq[u] = false;
for(int i = 0; i < G[u].size(); i++)
{
Edge & e = edges[G[u][i]];
if(d[u] < INF && d[e.to] > d[u] + d.dist)
{
d[e.to] = d[u] + e.dist;
p[e.to] = G[u][i];//前驱节点
if(!inq[e.to])
{
Q.push(e.to);
inq[e.to] = true;
if(++cnt[e.to] > n)
return false;
}
}
}
}
return true;
}