int spfa(int src)
{
queue<int> q;
bool inq[SIZE] = {0};
for(int i = 0; i <= n; i++) d[i] = (i == src)? 0:INF;
q.push(src);
while(!q.empty())
{
int x = q.front(); q.pop(); //并不是很理解,为什么之前就要出队
inq[x] = 0; //HDU3790之后出队会WA,找不到原因
for(int e = first[x]; e!=-1; e = next[e]) if(d[v[e]] > d[x]+w[e])
{
d[v[e]] = d[x]+w[e];
if(!inq[v[e]])
{
inq[v[e]] = 1;
if(++sum[v[e]] > n) //判断负环
{
return -1;
}
q.push(v[e]);
}
}
}
if(d[n] == INF) return -2;
else return d[n];
}
SPFA最短路径模板
最新推荐文章于 2019-09-14 11:00:38 发布