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 }
posted @ 2012-08-18 16:49  寒风剑海  阅读(267)  评论(0编辑  收藏  举报