poj3255Roadblocks之dijkstra解法
来源:互联网 发布:广告算法工程师招聘 编辑:程序博客网 时间:2024/05/17 03:24
- 分析:到某个顶点的v次短路径要么是到u的最短路径+u->v的边,要么是到u的次短路径加上u->v的边.因此,我们可以在dijkstra求最短路径的基础上进行改进,在更新最短路径的过程中,记录并更新次短路径.
/** Filename: code.cpp* Created: 2017-10-08* Author: wyl6 *[mail:17744454343@163.com]* Desciption: Desciption*/#include <cstdio>#include <cstdlib>#include <iostream>#include <stack>#include <queue>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <vector>#include <bitset>#include <list>#include <sstream>#include <set>#include <functional>using namespace std;#define INF 0x3f3f3f3fint n,r;int d[5005];int d2[5005];struct edge{int to,cost;edge(){}edge(int to,int cost):to(to),cost(cost){};};vector<edge>G[5005];typedef pair<int,int>P;//first距离,second节点priority_queue<P,vector<P>,greater<P>> que;void dijkstra(){ fill(d,d+n,INF); fill(d2,d2+n,INF); d[0] = 0; que.push(P(0,0)); while (!que.empty()){ P q = que.top(); que.pop(); int v = q.second,dist = q.first; for (int i = 0; i < G[v].size(); i += 1){ edge e = G[v][i]; int dist2 = dist + e.cost; if (d[e.to] > dist2){ //不是最短路径,将次短路径候选者保存下来 swap(d[e.to],dist2); //根据最短路径+边得到的次短路径 que.push(P(d[e.to],e.to)); } if ((dist2 > d[e.to]) && (dist2 < d2[e.to])){ d2[e.to] = dist2; que.push(P(d2[e.to],e.to));//根据次短路径+边得到的次短路径 } } } cout << d2[n-1] << endl;}int main(int argc, char const* argv[]){ cin >> n >> r; for (int i = 0; i < r; i += 1){ int a,b,c; cin >> a >> b >> c; G[a-1].push_back(edge(b-1,c));//容易出问题的地方,忘了标准化 G[b-1].push_back(edge(a-1,c)); } dijkstra(); return 0;}
阅读全文
1 0
- poj3255Roadblocks之dijkstra解法
- POJ3255Roadblocks
- poj3723Conscription之dijkstra解法
- poj3268Silver Cow Party之dijkstra解法
- poj1847Tram的dijkstra解法
- 最短带权路径问题的解法::Dijkstra & Floyd
- 最短路径问题(Dijkstra解法)
- 最短路径-迪杰斯特拉解法-Dijkstra法
- hdu1874(dijkstra解法优先队列优化)
- hdu 2066 一个人的旅行【Dijkstra】解法
- 迷宫解法之栈/队列的解法
- HDU1690(最短路 两种解法 Dijkstra和Floyd)
- 最大公约数之递归解法
- poj3669 之bfs解法
- 最短路之dijkstra
- 贪心算法之Dijkstra
- 最短路之Dijkstra
- 图之Dijkstra算法
- 面向对象--对象引用
- 【CCF-GAIR特别报道】深度对话周志华教授和颜水成博士
- VC高精度多媒体定时器使用方法
- 学习如何使用etcd-raft库
- java AWT事件处理
- poj3255Roadblocks之dijkstra解法
- 是否应该买点股票?企业的价值和股票的价值
- 添加语音播报功能
- 周计划 补完工程 第十二周 matlab 练习
- Warm up HDU
- 设计模式_策略模式(16)
- 单词翻转
- WebServer服务器原理(例子)
- Android 6.0 运行时权限处理 二维码开发