dijkstra求路径
来源:互联网 发布:ubuntu16 更换软件源 编辑:程序博客网 时间:2024/06/16 16:34
题目:
codeforces : http://codeforces.com/problemset/problem/20/C
大意:
给n和m,n是图中的n个节点,m是图中的路径数,求到1到n的最短路径,如果1无法到达n,输出-1。
思路:
c++的vector真是太好用了,看了巫泽俊(watashi)神犇犇的代码比做十道题还的收获还大。
用一个数组来记录到达该点的前一个点,然后回溯。
AC代码:
#include<cstdio>#include<queue>#include<utility>#include<vector>using namespace std;const int M = 1e5 + 10;const long long INF = 1e18;int p[M];long long d[M];vector<pair<int, int > > e[M];priority_queue<pair<long long, long long> >pq;vector<pair<int, int> >::iterator it;void dump(int a)//向前回溯,1前是0,所以a要大于1{ if(a > 1) dump(p[a]); printf("%d ", a);}main(){ int n, m; scanf("%d %d", &n, &m); while(m--) { int a, b, c; scanf("%d %d %d", &a, &b, &c); e[a].push_back(make_pair(b, c)); e[b].push_back(make_pair(a, c)); } fill(d, d + n + 1, INF); d[1] = 0; pq.push(make_pair(0, 1)); while(!pq.empty()) { long long a = -pq.top().first, b = pq.top().second; pq.pop(); if(a != d[b]) continue; for(it = e[b].begin(); it != e[b].end(); it++) { if(it ->second + a < d[it ->first]) { d[it ->first] = it->second + a; p[it ->first] = b; pq.push(make_pair(-d[it->first], it->first)); } } } if(d[n] == INF) puts("-1"); else dump(n);}
0 0
- dijkstra求路径
- Dijkstra算法求图的单源最短路径
- dijkstra求最短路并记录路径
- 迪杰斯特拉(Dijkstra)算法求图的最短路径
- dijkstra算法--求两点之的最短路径
- sdut 2622 最短路径(Dijkstra算法求最短路)
- dijkstra算法求两点之间最短路径
- Dijkstra模板求单源点最短路径
- POJ 1125 Stockbroker Grapevine (Dijkstra求所有点的单源最短路径)
- Dijkstra算法求任意点到其它点的最短路径
- 机试算法讲解: 第38题 求Dijkstra最短路径及花费
- HDU 2066 一个人的旅行(Dijkstra求特殊点的单源最短路径)
- dijkstra(n^2)求某个点到所有点的最短路径
- 求图的邻接表表示法的单源最短路径 Dijkstra算法
- POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
- Dijkstra算法求最短距离并输出路径(Java实现)
- 算法储备之Dijkstra算法求单源点最短路径
- Dijkstra 求最短路
- NYOJ 269 VF
- 如何样让datetime类型的数据只有年月日
- textview 动态改变点击态效果
- 全注解SSH
- PHP基础加强(第二天)
- dijkstra求路径
- Python<6>if条件测试
- c11_3.老鼠在菜园出口处遇见一只猫"¤",吓得往回逃,沿着阶梯状路线逃到入口处。
- struts2 文件上传 和 ServletFileUpload的矛盾
- 从Java代码到Java堆---Java代码内存使用情况的深入见解
- ZOJ-1524
- 批处理文件启动或停止服务
- Smack XmppConnect分析
- hbase集群启动后regionserver拒绝访问