Spfa

 1 struct Edge {
 2     int v, w;
 3     int next;
 4 }edge[MAXM];
 5 int head[MAXN], d[MAXN], tot;
 6 bool vis[MAXN];
 7 void addedge(int u, int v, int w) {
 8     edge[tot].v = v;
 9     edge[tot].w = w;
10     edge[tot].next = head[u];
11     head[u] = tot++;
12 }
13 void spfa(int s) {
14     queue<int> Q;
15     memset(d, 0x3f, sizeof(d));
16     d[s] = 0;
17     Q.push(s);
18     while(!Q.empty()) {
19         int tmp = Q.front();
20         Q.pop();
21         vis[tmp] = false;
22         for(int i = head[tmp]; i+1; i = edge[i].next) {
23             if(d[edge[i].v] > d[tmp] + edge[i].w) {
24                 d[edge[i].v] = d[tmp] + edge[i].w;
25                 if(!vis[edge[i].v]) {
26                     vis[edge[i].v] = true;
27                     Q.push(edge[i].v);
28                 }
29             }
30         }
31     }
32 }

 

posted @ 2015-04-10 21:23  Mite  阅读(160)  评论(0)    收藏  举报