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

堆优化的Dijkstra

时间:2016-08-21 15:20:57      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

SPFA在求最短路时不是万能的。在稠密图时用堆优化的dijkstra更加高效:

 
 1 typedef pair<int,int> pii;
 2 priority_queue<pii, vector<pii>, greater<pii> > q
 3 void dijkstra(){
 4             memset(dis,10,sizeof(dis));
 5             memset(vis,0,sizeof(vis));
 6             dis[K]=0;
 7             q.push(make_pair(dis[K],K));
 8             while(!q.empty()){
 9                   pii tmp=q.top();q.pop();
10                   int node=tmp.second;
11                   if(vis[node])continue;
12                   vis[node]=1;
13                   for(int i=LINK[node];i;i=e[i].next)
14                         if(dis[e[i].y]>dis[node]+e[i].v){
15                               dis[e[i].y]=dis[node]+e[i].v;
16                               q.push(make_pair(dis[e[i].y],e[i].y));
17                         }
18             }
19 }

 

堆优化的Dijkstra

标签:

原文地址:http://www.cnblogs.com/Cydiater/p/5792715.html

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