POJ 3255 Roadblocks
2014-12-21 20:34
246 查看
求次短路
#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cmath> #include <cstring> using namespace std; #define INF 0xfffffff #define maxn 5060 struct Edge { int e, w; Edge(int e=0,int w=0): e(e), w(w) {} }; int n, m; int dist[2][maxn]; int vis[maxn]; vector<Edge> G[maxn]; void Spfa(int Star,int k) { Edge P, Pn; queue <Edge> Q; dist[k][Star] = 0; Q.push( Edge(Star,0) ); while( !Q.empty() ) { P = Q.front(); Q.pop(); vis[P.e] = false; int len = G[P.e].size(); for(int i=0; i<len; i++) { Pn = G[P.e][i]; if(dist[k][Pn.e] > dist[k][P.e] + Pn.w ) { dist[k][Pn.e] = dist[k][P.e] + Pn.w; if(!vis[Pn.e] ) { Q.push(Pn); vis[Pn.e] = true; } } } } } int Slove() { int ans = INF; int Min = dist[0] ; Edge P; for(int i=1; i<=n; i++) { int len = G[i].size(); for(int j=0; j<len; j++) { P = G[i][j]; int temp = dist[0][i] + dist[1][P.e] + P.w; if(temp > Min && temp < ans) ans = temp; } } return ans; } void Init() { for(int i=1; i<=n; i++) { G[i].clear(); vis[i] = false; dist[0][i] = dist[1][i] = INF; } } int main() { while(cin >> n >> m) { int a, b, c; Init(); for(int i=0; i<m; i++) { scanf("%d%d%d",&a,&b,&c); G[a].push_back( Edge(b,c) ); G[b].push_back( Edge(a,c) ); } Spfa(1,0); Spfa(n,1); int ans = Slove(); cout << ans << endl; } return 0; }
相关文章推荐
- Poj 3255 Roadblocks【次短路】【大一最后一题】
- POJ 3255 Roadblocks (dijkstra最短路)
- 单源次短路径:poj:3255-Roadblocks
- POJ 3255 Roadblocks (Dijkstra求次短路)
- POJ 3255 Roadblocks (Dijkstra求最短路径的变形)(Dijkstra求次短路径)
- POJ 3255 Roadblocks(次短路)
- POJ 3255 Roadblocks
- POJ 3255 Roadblocks
- POJ 3255 Roadblocks 笔记
- POJ 3255 Roadblocks 次短路
- POJ_3255_Roadblocks【次短路径】
- poj 3255 Roadblocks
- POJ_3255 Roadblocks(最短路)
- poj 3255 Roadblocks【次短路】
- POJ 3255 Roadblocks
- poj 3255 Roadblocks
- POJ 3255 Roadblocks 次短路
- POJ --- 3255 Roadblocks
- poj 3255 Roadblocks(次短路)
- POJ - 3255 Roadblocks(最短路Dijkstra算法求次最短路)