spfa

Posted on 2015-05-29 11:47  跟队友脚步、带他们飞  阅读(123)  评论(1编辑  收藏  举报
 1 #define INF 0x7f7f7f7f
 2 int vis[N];
 3 int d[N];
 4 int num_nodes;
 5 int q[n*2];
 6 int pre[N];
 7 
 8 struct node
 9 {
10     int from,to,next,w;
11 }e[1000];
12 
13 int head[maxn];
14 int tot;
15 
16 void add(int s,int u,int w)
17 {
18     e[tot].from=s;
19     e[tot].to=u;
20     e[tot].w=w;
21     e[tot].next=head[s];
22     head[s]=tot++;
23 }
24 
25 void spfa(int s){
26     for(int i=1;i<=num_nodes;i++){
27         d[i]=INF;
28     }
29     memset(vis,0,sizeof(vis));
30     memset(pre,0,sizeof(pre));
31     int front ,rear;
32     front = rear = 0;
33     q[rear++]= s;
34     d[s]=0;
35     pre[s]=-1;
36     int u;
37     while(front<rear){
38         u = q[front++];
39         v[u] = 0;
40         for(int i=0;i<g[u].size();i++){
41             int k=e[i].to;
42             if(d[u]+e[i].w<d[k])
43             {
44                 pre[k]=i;
45                 d[k]=d[u]+e[i].w;
46                 if(!v[k])
47                 {
48                     v[k]=1;
49                     q[rear++]=k;
50                 }
51             }
52 
53         }
54     }
55 }