uva 10801(最短路径)
2014-11-07 20:14
281 查看
题意:有n个电梯和电梯各自的速度和能够到达的层数,一个人从0层开始坐电梯,给出一个目标层,要求输出最短时间达到目标层的时间,如果中间需要换电梯,需要等待60秒,如果无法达到输出Impossible。
题解:先构图,将结点之间的连通的最优情况存在二维数组g中,因为起点固定,用dijkstra算法,然后在更新dist数组(保存从起点到各个点的最短时间),dist[j] = min{dist[j], dist[i] + g[i][j] + 60},默认从0层开始坐电梯也加了60,所以如果目标层是0层需要特判。
题解:先构图,将结点之间的连通的最优情况存在二维数组g中,因为起点固定,用dijkstra算法,然后在更新dist数组(保存从起点到各个点的最短时间),dist[j] = min{dist[j], dist[i] + g[i][j] + 60},默认从0层开始坐电梯也加了60,所以如果目标层是0层需要特判。
#include <stdio.h> #include <string.h> const int N = 100; const int INF = 0x3f3f3f3f; int g , n, k, t[5], vis , dist , prev , ele ; void dijkstra() { memset(vis, 0, sizeof(vis)); memset(dist, INF, sizeof(dist)); dist[0] = 0; for (int i = 0; i < N; i++) {//可能有坐电梯下降到目标层的情况,所以是N而不是k int minn = INF, index; for (int j = 0; j < N; j++) { if (!vis[j] && dist[j] < minn) { minn = dist[j]; index = j; } } vis[index] = 1; for (int j = 0; j < N; j++) if (dist[index] + g[index][j] + 60 < dist[j]) { dist[j] = dist[index] + g[index][j] + 60; } } } int main() { while (scanf("%d%d", &n, &k) != EOF) { memset(g, INF, sizeof(g)); for (int i = 0; i < n; i++) scanf("%d", &t[i]); for (int i = 0; i < n; i++) { char c; int temp = 0; while (scanf("%d%c", &ele[temp++], &c) && c == ' '); for (int j = 0; j < temp; j++) for (int k = j; k < temp; k++) { int temp2 = (ele[k] - ele[j]) * t[i]; if (temp2 < g[ele[k]][ele[j]]) g[ele[k]][ele[j]] = g[ele[j]][ele[k]] = temp2; } } if (k == 0) { printf("0\n"); continue; } dijkstra(); if (dist[k] < INF) printf("%d\n", dist[k] - 60); else printf("IMPOSSIBLE\n"); } return 0; }
相关文章推荐
- uva11374迪杰斯特拉最短路径+打印
- POJ 1502 MPI Maelstrom / UVA 432 MPI Maelstrom / SCU 1068 MPI Maelstrom / UVALive 5398 MPI Maelstrom /ZOJ 1291 MPI Maelstrom (最短路径)
- uva 10986(最短路径)
- UVa10816 - Travel in Desert(二分法+最短路径求法)
- uva 567(最短路径)
- uva 10048(最短路径)
- uva10986(最短路径)
- Uva 429 Word Transformation ( 最短路径 )
- UVA10048 Floyd最短路径
- Uva821 Page Hopping(最短路径Floyd应用)
- UVa - 10278 Fire Station 消防站 图上的多源最短路径
- UVa10917 - Walk Through the Forest(单源最短路径及动态规划)
- UVa 10246 Asterix and Obelix(变形的最短路径)
- uva 10803(最短路径)
- uva10986 堆优化单源最短路径(pas)
- uva 563 Crimewave 最短路径
- uva 1416 Warfare And Logistics (最短路径树)
- POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径)
- Uva 11090 最短路径
- UVA - 216 Getting in Line (求最短路径)