POJ 1847 Tram --set实现最短路SPFA
来源:互联网 发布:37玩剑雨江湖进阶数据 编辑:程序博客网 时间:2024/05/03 23:51
题意很好懂,但是不好下手。这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题。并且pre数组记录前驱节点,print_path()方法可用算法导论上的。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <vector>#include <set>#define Mod 1000000007#define INT 2147483647#define pi acos(-1.0)#define eps 1e-3#define lll __int64#define ll long longusing namespace std;#define N 100007const int INF = Mod;vector<pair<int,int> > edge[N];set<pair<int,int> > que;int a[6][6],n;int d[N],pre[N];void print_path(int s,int v){ if(v == s) printf("(%d, %d)\n",(s-1)/5,(s%5+5-1)%5); else { print_path(s,pre[v]); printf("(%d, %d)\n",(v-1)/5,(v%5+5-1)%5); }}int ok(int x,int y){ if(x >= 0 && x < 5 && y >= 0 && y < 5) return 1; return 0;}void SPFA(){ int i; for(i=2;i<=n;i++) d[i] = INF; d[1] = 0; que.insert(make_pair(d[1],1)); while(!que.empty()) { int v = que.begin()->second; que.erase(que.begin()); for(i=0;i<edge[v].size();i++) { int to = edge[v][i].first; int cost = edge[v][i].second; if(d[v] + cost < d[to]) { que.erase(make_pair(d[to],to)); d[to] = d[v] + cost; pre[to] = v; que.insert(make_pair(d[to],to)); } } } print_path(1,n);}int main(){ int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); for(i=0;i<5;i++) { for(j=0;j<5;j++) { if(a[i][j] == 0) { int ka = i*5 + j + 1,kb; if(ok(i+1,j) && a[i+1][j] == 0) { kb = ka + 5; edge[ka].push_back(make_pair(kb,1)); } if(ok(i,j+1) && a[i][j+1] == 0) { kb = ka+1; edge[ka].push_back(make_pair(kb,1)); } if(ok(i-1,j) && a[i-1][j] == 0) { kb = ka-5; edge[ka].push_back(make_pair(kb,1)); } if(ok(i,j-1) && a[i][j-1] == 0) { kb = ka-1; edge[ka].push_back(make_pair(kb,1)); } } } } n = 25; SPFA(); return 0;}
0 0
- POJ 1847 Tram --set实现最短路SPFA
- poj 1847 Tram (SPFA最短路)
- poj 1847 Tram 【最短路 dijkstra + floyd + spfa】
- POJ 1847 Tram Floyd或者spfa 最短路
- (POJ 1847)Tram 简单最短路 spfa
- Tram [最短路][spfa]
- POJ 1847 Tram 最短路
- POJ 1847 Tram(最短路)
- POJ - 1847Tram最短路
- poj-1847 Tram 最短路
- POJ-1847 Tram( 最短路 )
- POJ1847--Tram 【最短路spfa】
- POJ 1847 Tram 【最短路,spfa算法,题意理解是关键呀!!】
- POJ 1847 Tram(floyd 最短路)
- poj-1847-Tram(最短路问题)
- POJ 1847 tram 最短路 (Flord)
- poj 1847 Tram (最短路)
- POJ 1847 Tram 简单最短路★
- POJ 2387 Til the Cows Come Home --最短路模板题
- Codeforces 402B --耻辱的一题
- Linux 计划任务之crontab
- 博客中的样式源码若干
- UESTC 32 树上战争(Battle on the tree)
- POJ 1847 Tram --set实现最短路SPFA
- 最短路径问题的Dijkstra和SPFA算法总结
- HDU 1102 Constructing Roads
- POJ 1679 The Unique MST --Kruskal应用
- 初探网络编程--TCP套接字编程演示
- 【转】次短路径与次小生成树问题的简单解法
- POJ 3255 Roadblocks --次短路径
- URAL 1416 Confidential --最小生成树与次小生成树
- 数据可视化之从Web收集数据小实例