hdoj_2112
HDU Today
Time Limit: 15000/5000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9383????Accepted Submission(s): 2236
Problem Description 經過錦囊相助,海東集團終于度過了危機,從此,HDU的發展就一直順風順水,到了2050年,集團已經相當規模了,據說進入了錢江肉絲經濟開發區500強。這時候,XHD夫婦也退居了二線,并在風景秀美的諸暨市浬浦鎮陶姚村買了個房子,開始安度晚年了。
這樣住了一段時間,徐總對當地的交通還是不太了解。有時很郁悶,想去一個地方又不知道應該乘什么公交車,在什么地方轉車,在什么地方下車(其實徐總自己有車,卻一定要與民同樂,這就是徐總的性格)。
徐總經常會問蹩腳的英文問路:“Can you help me?”。看著他那迷茫而又無助的眼神,熱心的你能幫幫他嗎?
請幫助他用最短的時間到達目的地(假設每一路公交車都只在起點站和終點站停,而且隨時都會開)。
Input 輸入數據有多組,每組的第一行是公交車的總數N(0<=N<=10000);
第二行有徐總的所在地start,他的目的地end;
接著有n行,每行有站名s,站名e,以及從s到e的時間整數t(0<t<100)(每個地名是一個長度不超過30的字符串)。
note:一組數據中地名數不會超過150個。
如果N==-1,表示輸入結束。
Output 如果徐總能到達目的地,輸出最短的時間;否則,輸出“-1”。
Sample Input 6 xiasha westlake xiasha station 60 xiasha ShoppingCenterofHangZhou 30 station westlake 20 ShoppingCenterofHangZhou supermarket 10 xiasha supermarket 50 supermarket westlake 10 -1
Sample Output 50 Hint: The best route is: xiasha->ShoppingCenterofHangZhou->supermarket->westlake
STL map + dijkstra
#include<iostream> #include<cstdio> #include<cstring> #include<map> #include<cmath> #include<vector> #include<algorithm> #include<set> #include<string> #include<queue> #include <stack> using namespace std; #pragma warning(disable : 4996)const int MAXN = 300; const int INF = 999999; int n; int maps[MAXN][MAXN]; bool visited[MAXN]; int dist[MAXN];void init() {memset(visited, false, sizeof(visited));for (int i = 1; i < MAXN; i++){for (int j = 1; j < MAXN; j++){if(i == j){maps[i][j] = 0;}else{maps[i][j] = INF;}}} }void Dijkstra(int s, int e) //起點,終點 {int i, j;int minValue, minNode;dist[s] = 0;visited[s] = true;for (i = 1; i <= n; i++){dist[i] = maps[s][i];}for (i = 1; i <= n; i++){minValue = INF;minNode = 0;for (j = 1; j <= n; j++){if(!visited[j] && minValue > dist[j]){minNode = j;minValue = dist[j];}}if(minNode == 0){break;}visited[minNode] = true;for (j = 1; j <= n; j++){if(!visited[j] && maps[minNode][j] != INF && dist[j] > dist[minNode] + maps[minNode][j]){dist[j] = dist[minNode] + maps[minNode][j];}}if(minNode == e){break;}} }int main() {freopen("in.txt", "r", stdin);char address[MAXN];string str, Start, End;map<string, int>Map;int t, len, cnt, x, y;while (scanf("%d", &t) != EOF){if(t == -1){break;}Map.clear();cnt = 1;cin >> Start >> End;init();for(int i = 1; i <= t; i++){scanf("%s", address);str = string(address);if(Map.find(str) == Map.end()){Map[str] = cnt++;}x = Map[str];scanf("%s", address);str = string(address);if(Map.find(str) == Map.end()){Map[str] = cnt++;}y = Map[str];scanf("%d", &len);if(maps[x][y] > len){maps[x][y] = len;maps[y][x] = len;}}if(Map.find(Start) == Map.end() || Map.find(End) == Map.end()){printf("-1\n");}else{n = Map.size();//cout << n << endl;x = Map[Start];y = Map[End];Dijkstra(x, y);if(dist[y] == INF){printf("-1\n");}else{printf("%d\n", dist[y]);}}}return 0; }轉載于:https://www.cnblogs.com/lgh1992314/archive/2013/05/18/5835049.html
總結
- 上一篇: QT下设置鼠标形状
- 下一篇: 各品牌类型电脑BOIS中USB模式启动热