Dijkstra with priority queue
来源:互联网 发布:mac 固定便签在桌面上 编辑:程序博客网 时间:2024/05/21 08:03
POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
//============================================================================// Name : POJ.cpp// Author : // Version :// Copyright : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>#include <string.h>#include <stdio.h>#include <algorithm>#include <queue>#include <vector>using namespace std;/* * 使用优先队列优化Dijkstra算法 * 复杂度O(ElogE) * 注意对vector<Edge>E[MAXN]进行初始化后加边 */const int INF=0x3f3f3f3f;const int MAXN=1000010;struct qnode{ int v; int c; qnode(int _v=0,int _c=0):v(_v),c(_c){} bool operator <(const qnode &r)const { return c>r.c; }};struct Edge{ int v,cost; Edge(int _v=0,int _cost=0):v(_v),cost(_cost){}};vector<Edge>E[MAXN];bool vis[MAXN];int dist[MAXN];void Dijkstra(int n,int start)//点的编号从1开始{ memset(vis,false,sizeof(vis)); for(int i=1;i<=n;i++)dist[i]=INF; priority_queue<qnode>que; while(!que.empty())que.pop(); dist[start]=0; que.push(qnode(start,0)); qnode tmp; while(!que.empty()) { tmp=que.top(); que.pop(); int u=tmp.v; if(vis[u])continue; vis[u]=true; for(int i=0;i<E[u].size();i++) { int v=E[tmp.v][i].v; int cost=E[u][i].cost; if(!vis[v]&&dist[v]>dist[u]+cost) { dist[v]=dist[u]+cost; que.push(qnode(v,dist[v])); } } }}void addedge(int u,int v,int w){ E[u].push_back(Edge(v,w));}int A[MAXN],B[MAXN],C[MAXN];int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); int n,m; int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<m;i++) scanf("%d%d%d",&A[i],&B[i],&C[i]); for(int i=1;i<=n;i++)E[i].clear(); for(int i=0;i<m;i++)addedge(A[i],B[i],C[i]); Dijkstra(n,1); long long ans=0; for(int i=1;i<=n;i++)ans+=dist[i]; for(int i=1;i<=n;i++)E[i].clear(); for(int i=0;i<m;i++)addedge(B[i],A[i],C[i]); Dijkstra(n,1); for(int i=1;i<=n;i++)ans+=dist[i]; printf("%I64d\n",ans); } return 0;}
0 0
- Dijkstra with priority queue
- Dijkstra with priority queue
- priority queue 优化的 dijkstra 算法
- priority queue
- stl priority queue
- Priority Queue Version 0.1
- A Priority Queue
- Algorithm episode --priority queue
- Priority Queue 源码分析
- 优先级队列 priority queue
- priority queue 优先队列
- Heap & Priority Queue
- priority queue 优先队列
- poj3614 priority queue
- deck & Priority Queue
- Priority Queue 优先级队列
- Python heap - priority queue
- Tricky Priority Queue
- Num 10 : HDOJ: 题目1093 :A+B for Input-Output Practice (V)
- 写在开始的话
- Redrain个人维护并使用的DuiLib和UiLib库源码下载地址
- C++ primer.Fifth Edition. PartI,2,Variable Initialization
- 点云数据写入PCD文件
- Dijkstra with priority queue
- Java创建文件要注意的一个问题
- 银行窗口排队叫号系统实现
- android获取外部SDCard(TF Card)
- django 1.8 官方文档翻译: 2-1-3 元选项 (初稿)
- Can not kill oozie job by -kill command
- 开关机压力测试APK学习
- uva 572 - Oil Deposits
- 慕课网——DOM解析XML