SPFA判负环

 1 struct edgs{int go,next,w;}e[maxm];
 2 double d[maxn];
 3 int n,m,tot,v[maxn],head[maxn];
 4 bool mark[maxn],flag;
 5 void insert(int x,int y,int z)
 6 {
 7     e[++tot].go=y;e[tot].w=z;e[tot].next=head[x];head[x]=tot;
 8 }
 9 void spfa(int x)
10 {
11     if(mark[x]){flag=1;return;}
12     mark[x]=1;
13     for(int i=head[x],y;i;i=e[i].next)
14      if(d[x]+e[i].w<d[y=e[i].go])
15       {
16           d[y]=d[x]+e[i].w;
17           spfa(y);
18           if(flag)return;
19       }
20     mark[x]=0;  
21 }
22 bool check()
23 {
24     for(int i=1;i<=n;i++)d[i]=mark[i]=0;
25     flag=0;
26     for(int i=1;i<=n;i++)
27      {
28          spfa(i);
29          if(flag)return 1;
30      }
31     return 0; 
32 }
View Code

 

posted @ 2015-09-11 09:38  HTWX  阅读(91)  评论(0编辑  收藏  举报