首页 > 其他 > 详细

STL+优先队列

时间:2014-07-30 20:29:24      阅读:323      评论:0      收藏:0      [点我收藏+]
 1 #include<iostream>
 2 #include<queue>
 3 #include<string.h>
 4 using namespace std;
 5 const int INF =100000000;
 6 const int MAXN =1000;
 7 const int MAXM =100000;
 8 int m,n;
 9 int first[MAXN],d[MAXN];
10 int u[MAXM],v[MAXM],w[MAXM],next[MAXM];
11 typedef pair<int ,int >pii;//STL中的pair便是专门把两个类型捆绑在一起。便于关联数据的输出与提取
12 priority_queue<pii ,vector<pii>,greater<pii> > q;//创建优先队列,这是自己定义的优先队列排序函
13 int main()
14 {
15    cin>>m>>n;
16    for(int e=0;e<m;e++)
17    {
18         cin>>u[e]>>v[e]>>w[e];
19         next[e]=first[u[e]];//这里是把第e条边的起点所对应的第一条边的值赋给e的下一条边
20         first[u[e]]=e; //并把第e条边的起点的第一条边设置为e 
21    }
22    bool done[MAXN];
23    for(int i=0;i<n;i++)
24    d[i]=(i==0?0:INF);
25    memset(done,0,sizeof(memset));
26    q.push(make_pair(d[0],0));//将第一条数据压入优先队列
27    while(!q.empty())
28    {
29        pii u=q.top();
30        q.pop();
31        int x =u.second;//获得节点号,u.first是d[i]
32        if(done[x]) continue;
33        done[x]=1;
34        for(e=first[x];e!=-1;e=next[e])
35        {
36            if(d[v[e]]>d[x]]+w[e])
37            d[v[e]]=d[x]]+w[e];
38            q.push(make_pair(d[v[e]],v[e])); //如果未被访问,则压入优先队列  
39        }
40        
41    }
42    for(int i=0;i<MAXN;i++)
43    cout<<d[i]<<endl;
44    return 0;
45 }

 

STL+优先队列,布布扣,bubuko.com

STL+优先队列

原文:http://www.cnblogs.com/khbcsu/p/3878686.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!