Dijkstra模板[kuangbin]
来源:互联网 发布:手机离线对讲机软件 编辑:程序博客网 时间:2024/05/21 09:53
#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;}
阅读全文
0 0
- Dijkstra模板[kuangbin]
- 最短路(Dijkstra)Kuangbin大神的模板
- AC自动机模板->kuangbin
- kuangbin高斯消元模板
- kuangbin高精度模板
- dijkstra 模板
- dijkstra 模板
- Dijkstra模板
- dijkstra模板
- dijkstra模板
- Dijkstra模板
- (Dijkstra模板)
- Dijkstra模板
- Dijkstra模板
- Dijkstra 模板
- Dijkstra模板
- dijkstra 模板
- dijkstra模板
- 算法入门——冒泡排序
- HTML5自带的表单验证
- [设计模式]1. Template Method
- ssh 免密码登录设置后还是提示需要输入密码
- MTU,窗口大小和mss的区别
- Dijkstra模板[kuangbin]
- 程序员要知道的移位技巧
- 浅谈http返回码
- 微信开发怎么被动发送图文消息用户输入信息之后回复
- 在openStark框架中能用taskctl吗
- C++序列化
- intel caffe出现undefined symbol: mkl_sparse_d_csr__g_n_syrk_notr_row_struct_i8
- centos 优化 (内存等等)
- Docker部署基于Nodejs的Web应用-实战篇