首页 > 代码库 > STL+优先队列
STL+优先队列
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。