码迷,mamicode.com
首页 > 其他好文 > 详细

Spfa

时间:2015-04-10 22:04:28      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

 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 }

 

Spfa

标签:

原文地址:http://www.cnblogs.com/mitrenick/p/4415699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!