Dijkstra模板[kuangbin]
2017-08-24 10:16
260 查看
#include <bits/stdc++.h> 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 main() { int n,m; int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)E[i].clear(); for(int i=0;i<m;i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); addedge(u,v,w); //addedge(v,u,w);无向图 } Dijkstra(n,1); //单源最短路,dist[i]为从源点start到i的最短路 } return 0; }
相关文章推荐
- 最短路(Dijkstra)Kuangbin大神的模板
- 【图论】单源点最短路模板(有向图)Dijkstra
- HDU 2544 最短路——简单的模板题 dijkstra
- HD 2544 最短路 【dijkstra】 (模板题)
- ACM模板 dijkstra,最短路径
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
- kuangbin 1B简单bfs(模板题)
- 最短路模板[spfa][dijkstra+堆优化][floyd]
- 【模板】Dijkstra的heap优化
- 二维凸包模板——kuangbin版
- P3371 【模板】单源最短路径 SPFA优化 dijkstra堆优化
- hdu 2544 hdu 1874 poj 2387 Dijkstra 模板题
- 迪杰斯特拉/dijkstra 算法模板(具体凝视)
- poj1144(求割点---kuangbin的模板)
- [ 模板 ] 堆优化Dijkstra
- 单源最短路---dijkstra模板(二叉堆优化)
- Dijkstra 单源最短路 模板 uva11374
- 模板 图论 Dijkstra+堆优化
- dijkstra堆优化模板