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 }