<span style="font-size:18px;">
int spfa(int s,int t)
{
int d[maxn];
int vis[maxn];
memset(vis,0,sizeof vis);
queue<int>que;
que.push(s);
vis[s]=1;
for(int i=1; i<=20; i++) d[i]=INF;
d[s]=0;
while(que.size())
{
int k=que.front();
vis[k]=0;
que.pop();
for(int i=fir[k]; ~i; i=nex[i])
{
if(d[k]+w[i]<d[v[i]])
{
d[v[i]]=d[k]+w[i];
if(!vis[v[i]]) //注意此处是下一条边的判断
{
que.push(v[i]);
vis[v[i]]=1;
}
}
}
}
return d[t];
}
// PS:如果需要判负环,另外设置一个数组c记录每个点的进队列次数,大于总点数则有环,返回-1;
</span>
SPFA算法模板
最新推荐文章于 2018-07-31 21:20:27 发布