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

Dijkstra 堆优化

时间:2015-04-10 21:53:51      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

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

 

Dijkstra 堆优化

标签:

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

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