hdu 1874 畅通工程续(最短路Dij邻接表)
2015-11-03 14:35
302 查看
题目地址
题目大意:给出n个点m条边,并给出起点和终点,求起点到终点的最短路
解题思路:1.没有负边权
2.复杂度mlg(n)(n为点的个数,m为边的条数)
3.起点固定,不断更新终点,若要输出路径,则需要逆序输出
4.适用于有向图和无向图
5.用优先队列来优化,定义按照到起点的距离从小到大排序(greater)
题目大意:给出n个点m条边,并给出起点和终点,求起点到终点的最短路
解题思路:1.没有负边权
2.复杂度mlg(n)(n为点的个数,m为边的条数)
3.起点固定,不断更新终点,若要输出路径,则需要逆序输出
4.适用于有向图和无向图
5.用优先队列来优化,定义按照到起点的距离从小到大排序(greater)
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <vector> #include <queue> #include <utility> using namespace std; const int maxn = 210;///点的个数 const int maxm = 4010;///边的个数 const int INF = 0xfffffff; int n,m,cnt;///有n个点,m条边 int vis[maxn],dis[maxn],head[maxn]; typedef pair<int,int> pii; struct edge { int to,val,next; }e[maxm]; void add(int from,int to,int val) { e[cnt].to=to; e[cnt].val=val; e[cnt].next=head[from]; head[from]=cnt++; } void Dijkstra(int s) { memset(vis,0,sizeof(vis)); for(int i = 0 ; i < n ; i++) /*初始化点的距离*/ dis[i] = INF; dis[s] = 0; priority_queue<pii,vector<pii>,greater<pii> > pq; pq.push(make_pair(dis[s],s)); while(!pq.empty()) { pii u = pq.top(); pq.pop(); int x = u.second; //点 if(vis[x]) continue; vis[x] = 1; for(int i = head[x]; i != -1; i = e[i].next)//对每条边及其有相同点(x)的其他边进行更新 { int v = e[i].to; if(dis[v] > dis[x]+e[i].val && !vis[v]) { dis[v] = dis[x] + e[i].val; pq.push(make_pair(dis[v],v)); } } } } int main() { while(scanf("%d%d",&n,&m) != EOF) { cnt = 0; memset(head,-1,sizeof(head)); for(int i=0;i<m;i++) { int from,to,val; scanf("%d%d%d",&from,&to,&val); add(from,to,val); add(to,from,val); } int s,t; scanf("%d%d",&s,&t); Dijkstra(s); dis[t]==INF ? printf("-1\n") : printf("%d\n",dis[t]); } return 0; }
相关文章推荐
- 【PAT】1091. Acute Stroke (30)
- c#基础5
- OC学习第七天_1NSDate NStimeFormatter NSTimeZone
- 处理大数字BigInteger与BigDecimal
- Android AsyncTask异步的学习
- eclipse Debug 技巧 1
- SVN版本控制
- 汉字简体与繁体互相转换
- 分类&回归算法-随机森林
- Angular学习笔记--last_update 20151106
- request.getSession(true)和request.getSession(false)的区别
- Nginx图片剪裁模块探究 http_image_filter_module
- 将博客搬至博客园
- 4.3
- iOS9 系统分享调用之UIActivityViewController
- 新浪微博-表情键盘的事件处理
- ASIHTTPRequest中数据压缩问题与gzip
- shell getopts 用法
- 网格形变算法(Gradient-Based Deformation)
- bzoj2793.Vouchers(调和级数)