标签:
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 }
标签:
原文地址:http://www.cnblogs.com/mitrenick/p/4415699.html