const int INF=1e9+100;
int d[505];
struct edge{int to,cost;};
vector<edge> g[505];
bool spfa(int n)
{
int cnt[505];
bool vis[505];
for(int i=1;i<=n;i++){
memset(vis,false,sizeof(vis));memset(cnt,0,sizeof(cnt));
for(int j=0;j<=n;j++) d[j]=1e9+100;
d[i]=0;cnt[i]++;
queue<int> que; que.push(i);
while(!que.empty()){
int now=que.front();que.pop(); vis[now]=false;
for(int j=0;j<g[now].size();j++){
int to=g[now][j].to,cost=g[now][j].cost;
//printf("111 %d %d %d %d\n",i,now,to,cost);
if(d[to]>d[now]+cost){
d[to]=d[now]+cost;
if(!vis[to]) vis[to]=true,que.push(to);
cnt[to]++;
if(cnt[to]>n)
{//printf("haha %d\n",to);
return true;}
}
}
}
}
return false;
}
我的spfa
最新推荐文章于 2023-12-25 22:46:13 发布