1. 程式人生 > >HDU 2112 Today(Djikstra+map)

HDU 2112 Today(Djikstra+map)

題目 經濟 開始 namespace 表示 get target pac inf

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2112

題目大意:

經過錦囊相助,海東集團終於度過了危機,從此,HDU的發展就一直順風順水,到了2050年,集團已經相當規模了,據說進入了錢江肉絲經濟開發區500強。這時候,XHD夫婦也退居了二線,並在風景秀美的諸暨市浬浦鎮陶姚村買了個房子,開始安度晚年了。
這樣住了一段時間,徐總對當地的交通還是不太了解。有時很郁悶,想去一個地方又不知道應該乘什麽公交車,在什麽地方轉車,在什麽地方下車(其實徐總自己有車,卻一定要與民同樂,這就是徐總的性格)。
徐總經常會問蹩腳的英文問路:“Can you help me?”。看著他那迷茫而又無助的眼神,熱心的你能幫幫他嗎?
請幫助他用最短的時間到達目的地(假設每一路公交車都只在起點站和終點站停,而且隨時都會開)。 輸入數據有多組,每組的第一行是公交車的總數N(0<=N<=10000);
第二行有徐總的所在地start,他的目的地end;
接著有n行,每行有站名s,站名e,以及從s到e的時間整數t(0<t<100)(每個地名是一個長度不超過30的字符串)。
note:一組數據中地名數不會超過150個。
如果N==-1,表示輸入結束。 如果徐總能到達目的地,輸出最短的時間;否則,輸出“-1”。 解題思路:本題就是一道簡單的最短路,麻煩的地方就是題目給的地點是字符串的形式,如果我們用map<string,int>將其轉換為數字,那就是一個平常的最短路問題了。 註意幾點:1、可能起點就是終點(特判一下),2、可能終點不會出現在給出的路線中(所以要提前給起點終點賦好值,而不是在輸入路徑時賦值)。
 1
#include<iostream> 2 #include<string> 3 #include<map> 4 const int N=155; 5 const int INF=1<<30-1; 6 using namespace std; 7 8 int V,E; 9 int cost[N][N]; 10 int dis[N]; 11 bool used[N]; 12 13 void dij(int s){ 14 for(int i=1;i<=V;i++){ 15 dis[i]=INF; 16 used[i]=false
; 17 } 18 dis[s]=0; 19 20 while(true){ 21 int k=-1; 22 for(int i=1;i<=V;i++){ 23 if(!used[i]&&(k==-1||dis[k]>dis[i])) 24 k=i; 25 } 26 if(k==-1) break; 27 used[k]=true; 28 for(int i=1;i<=V;i++){
29 if(dis[i]>dis[k]+cost[k][i]) 30 dis[i]=dis[k]+cost[k][i]; 31 } 32 } 33 } 34 35 int main(){ 36 37 while(cin>>E&&E!=-1){ 38 map<string,int>mp; 39 string start,end; 40 int num=0; 41 cin>>start>>end; 42 //提前給起點終點賦好值 43 mp[start]=++num; 44 mp[end]=++num; 45 for(int i=1;i<N;i++){ 46 for(int j=1;j<N;j++){ 47 cost[i][j]=(i==j?0:INF); 48 } 49 } 50 for(int i=1;i<=E;i++){ 51 string s1,s2; 52 int val; 53 cin>>s1>>s2>>val; 54 if(mp.find(s1)==mp.end()){ 55 mp[s1]=++num; 56 } 57 if(mp.find(s2)==mp.end()){ 58 mp[s2]=++num; 59 } 60 cost[mp[s1]][mp[s2]]=val; 61 cost[mp[s2]][mp[s1]]=val; 62 } 63 V=num; 64 dij(mp[start]); 65 //特判 66 if(start==end){ 67 cout<<"0"<<endl; 68 continue; 69 } 70 if(dis[mp[end]]!=INF) 71 cout<<dis[mp[end]]<<endl; 72 else 73 cout<<"-1"<<endl; 74 } 75 }

HDU 2112 Today(Djikstra+map)