SPFA

//------------SPFA-------------
#define MOVE(x) (x=(x+1)%n)
int map[N][N];
int queue[N],front,rear;
int dist[N];
bool flag[N];
int record[N];

bool SPFA(int n,int s)
{
int i,u;
front
=rear=0;
for(i=1;i<=n;i++)
{
dist[i]
=map[s][i];
flag[i]
=false;
if(dist[i]!=MAXDIST)
{
queue[MOVE(rear)]
=i;
flag[i]
=true;
record[i]
++;
}
}
while(front!=rear)
{
u
=queue[MOVE(front)];
flag[u]
=false;
for(i=1;i<=n;i++)
{
if(dist[u]+map[u][i]<dist[i])
{
dist[i]
=dist[u]+map[u][i];
if(!flag[i])
{
queue[MOVE(rear)]
=i;
if(++record[i]>n) return false;//你说这行写的对不?
}
}
}
}

return true;
}

原文地址:https://www.cnblogs.com/fornever/p/2176194.html