hdu 2112 map + Dijkstra
好悲剧的一题,wa了十四次啊!啊!啊!啊!啊!啊!
好吧,其实挺简单的一题,注意以下几点就可以了
第一,无向图
第二,看清题意,明白输入输出
第三,注意函数传递参数(14次的根本原因就是这里,有木有!!!)
直接上代码,map + Dijkstra
1 #include<map> 2 #include<string> 3 #include<iterator> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 8 map<string, int> treeMap; 9 map<string, int>::iterator mapIter1; 10 map<string, int>::iterator mapIter2; 11 const int inf = 1000000; 12 const int Size = 160; 13 14 bool vis[Size]; 15 int dist[Size]; 16 int cost[Size][Size]; 17 18 void Dijkstra(int v, int w, int n) 19 { 20 int i,j; 21 int u; 22 int min; 23 24 for(i = 1; i <= n; i ++) 25 { 26 dist[i] = cost[v][i]; 27 vis[i] = false; 28 } 29 30 vis[v] = true; 31 dist[v] = 0; 32 33 for(i = 2; i <= n; i ++) 34 { 35 min = inf; 36 for(j = 1; j <= n; j ++) 37 if(!vis[j] && min > dist[j]) 38 { 39 min = dist[j]; 40 u = j; 41 } 42 43 vis[u] = true; 44 45 for(j = 1; j <= n; j ++) 46 if(!vis[j] && dist[j] > dist[u] + cost[u][j]) 47 dist[j] = dist[u] + cost[u][j]; 48 } 49 50 if(dist[w] == inf) 51 cout << "-1" << endl; 52 else 53 cout << dist[w] << endl; 54 } 55 56 int main() 57 { 58 int sp; 59 int num; 60 int len; 61 int i,j; 62 int cnt = 0; 63 string start,destination; 64 string begin,end; 65 66 while(true) 67 { 68 cin >> num; 69 70 if(num == -1) 71 break; 72 73 sp = 0; 74 cnt = 0; 75 treeMap.clear(); 76 77 cin >> start >> destination; 78 if(!treeMap[start]) 79 { 80 cnt ++; 81 treeMap[start] = cnt; 82 } 83 if(!treeMap[destination]) 84 { 85 cnt ++; 86 treeMap[destination] = cnt; 87 } 88 89 for(i = 0; i < Size; i++) 90 for(j = 0; j < Size; j++) 91 if(i == j) 92 cost[i][j] = 0; 93 else 94 cost[i][j] = inf; 95 96 for(i = 1; i <= num; i ++) 97 { 98 cin >> begin >> end; 99 if(!treeMap[begin]) 100 { 101 cnt ++; 102 treeMap[begin] = cnt; 103 } 104 if(!treeMap[end]) 105 { 106 cnt ++; 107 treeMap[end] = cnt; 108 } 109 110 cin >> len; 111 cost[treeMap[end]][treeMap[begin]] = cost[treeMap[begin]][treeMap[end]] = len; 112 } 113 114 Dijkstra(treeMap[start], treeMap[destination], treeMap.size()); 115 } 116 117 return 0; 118 }