uva 10801(乘电梯dijkstra)
2015-02-14 16:16
246 查看
题意:
给几个电梯,电梯0 ~ n-1分别可以到达很多层楼。
换乘电梯需要60s时间。
问从0层到target层最小的时间。
解析:
将进入第0层的电梯60s也算上,最后减。
坑点是如果target为0输出0。
代码:
给几个电梯,电梯0 ~ n-1分别可以到达很多层楼。
换乘电梯需要60s时间。
问从0层到target层最小的时间。
解析:
将进入第0层的电梯60s也算上,最后减。
坑点是如果target为0输出0。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cstring> #include <cmath> #include <stack> #include <vector> #include <queue> #include <map> #include <climits> #include <cassert> #define LL long long using namespace std; const int maxn = 100 + 10; const int inf = 0x3f3f3f3f; const double eps = 1e-8; const double pi = 4 * atan(1.0); const double ee = exp(1.0); int n, target; int Time[maxn], tot; int g[maxn][maxn], Index[maxn]; int dis[maxn]; bool vis[maxn]; void readGraph(int x) { for (int i = 0; i < tot; i++) { for (int j = 0; j < tot; j++) { if (i != j) { int t = abs(Index[i] - Index[j]) * Time[x]; if (t < g[Index[i]][Index[j]]) g[Index[i]][Index[j]] = g[Index[j]][Index[i]] = t; } } } } void dijkstra() { memset(vis, false, sizeof(vis)); memset(dis, inf, sizeof(dis)); dis[0] = 0; vis[0] = true; for(int i = 0; i < 100; i++) { int mark = 0, mindis = inf; for(int j = 0; j < 100; j++) { if(!vis[j] && dis[j] < mindis) { mindis = dis[j]; mark = j; } } vis[mark] = true; for(int j = 0; j < 100; j++) { if (!vis[j]) { dis[j] = min(dis[j], dis[mark] + g[mark][j] + 60); } } } } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL while (~scanf("%d%d", &n, &target)) { memset(g, inf, sizeof(g)); memset(Time, 0, sizeof(Time)); memset(Index, 0, sizeof(Index)); for (int i = 0; i < n; i++) { scanf("%d", &Time[i]); } for (int i = 0; i < n; i++) { memset(Index, 0, sizeof(Index)); tot = 0; do { scanf("%d", &Index[tot++]); } while (getchar() != '\n'); readGraph(i); } dijkstra(); if (dis[target] == inf) printf("IMPOSSIBLE\n"); else { if (target == 0) printf("0\n"); else printf("%d\n", dis[target] - 60); } } return 0; }
相关文章推荐
- uva 10801 Lift Hopping Dijkstra最短路
- uva10801 Dijkstra
- uva 10801(dijkstra)
- UVa 10801 电梯换乘
- UVA - 10801 Lift Hopping (Dijkstra)
- [UVA 10801]Lift Hopping[Dijkstra][建图]
- UVA 10801 - Lift Hopping Dijkstra 算法
- uva 10801 - Lift Hopping(最短路Dijkstra)
- UVA 10801 - Lift Hopping(dijkstra)
- uva 10801 Lift Hopping(dijkstra)
- UVA 10801 Lift Hopping 电梯换乘(最短路,变形)
- UVa 10801 - Lift Hopping (Floyd, Dijkstra, SPFA三合一)
- UVa 10801 Lift Hopping (最短路+Dijkstra+建图)
- UVa 10801 - Lift Hopping(Dijkstra, SPFA最短路)
- uva 10801 - Lift Hopping(最短路Dijkstra)
- UVa 10801 Lift Hopping (Dijkstra)
- UVa 10806 Dijkstra, Dijkstra. / 最小费用最大流
- UVA 12661 Funny Car Racing (Dijkstra最短路)
- UVa 10917 - Walk Through the Forest(Dijkstra + DFS)
- uva 11280(Dijkstra+递推)