HDU 2112 HDU Today lt;SPFA算法+map函数gt;
生活随笔
收集整理的這篇文章主要介紹了
HDU 2112 HDU Today lt;SPFA算法+map函数gt;
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HDU Today
Time Limit: 15000/5000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 19826????Accepted Submission(s): 4671
這時候。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 盡管偶爾會迷路,可是由于有了你的幫助 **和**從此還是過上了幸福的生活。
――全劇終――
Author lgx
Source ACM程序設計_期末考試(時間已定!!) 代碼: #include <stdio.h> #include <string.h> #include <queue> #include <iostream> #include <algorithm> #include <map> #define INF 0x3f3f3f3f using namespace std; int n; int edgenum; int head[20005]; char ex[35],ey[35]; int vis[155]; int dis[155]; void init() {edgenum=0;memset(head,-1,sizeof(head)); } struct Edge {int from,to,val,next; }edge[20005]; void addedge(int u,int v,int w) {Edge E={u,v,w,head[u]};edge[edgenum]=E;head[u]=edgenum++; } map<string,int>mp; int t; void getmap() {mp.clear();//一定要清零! getchar();scanf("%s%s",ex,ey);mp[ex]=1;t=2;if(!mp[ey]){mp[ey]=t++;}char a[35],b[35];int c;for(int i=1;i<=n;i++){getchar();scanf("%s%s%d",a,b,&c);if(!mp[a]){mp[a]=t++;}if(!mp[b]){mp[b]=t++;}addedge(mp[a],mp[b],c);addedge(mp[b],mp[a],c);} } void SPFA() {queue<int>q;q.push(1);memset(vis,0,sizeof(vis));memset(dis,INF,sizeof(dis));vis[1]=1;dis[1]=0;while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;if(dis[v]>dis[u]+edge[i].val){dis[v]=dis[u]+edge[i].val;if(vis[v]==0){vis[v]=1;q.push(v);}}}}if(dis[mp[ey]]==INF)printf("-1\n");elseprintf("%d\n",dis[mp[ey]]); } int main() {while(scanf("%d",&n)&&(n!=-1)){init();getmap();SPFA();}return 0; }
轉載于:https://www.cnblogs.com/wzjhoutai/p/7003384.html
總結
以上是生活随笔為你收集整理的HDU 2112 HDU Today lt;SPFA算法+map函数gt;的全部內容,希望文章能夠幫你解決所遇到的問題。