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
這時(shí)候。XHD夫婦也退居了二線,并在風(fēng)景秀美的諸暨市浬浦鎮(zhèn)陶姚村買了個(gè)房子,開始安度晚年了。
這樣住了一段時(shí)間,徐總對(duì)當(dāng)?shù)氐慕煌ㄟ€是不太了解。有時(shí)非常郁悶。想去一個(gè)地方又不知道應(yīng)該乘什么公交車,在什么地方轉(zhuǎn)車,在什么地方下車(事實(shí)上徐總自己有車。卻一定要與民同樂(lè)。這就是徐總的性格)。
徐總常常會(huì)問(wèn)蹩腳的英文問(wèn)路:“Can you help me?”。
看著他那迷茫而又無(wú)助的眼神。熱心的你能幫幫他嗎?
請(qǐng)幫助他用最短的時(shí)間到達(dá)目的地(如果每一路公交車都僅僅在起點(diǎn)站和終點(diǎn)站停。并且隨時(shí)都會(huì)開)。
Input 輸入數(shù)據(jù)有多組,每組的第一行是公交車的總數(shù)N(0<=N<=10000);
第二行有徐總的所在地start。他的目的地end;
接著有n行,每行有站名s。站名e,以及從s到e的時(shí)間整數(shù)t(0<t<100)(每一個(gè)地名是一個(gè)長(zhǎng)度不超過(guò)30的字符串)。
note:一組數(shù)據(jù)中地名數(shù)不會(huì)超過(guò)150個(gè)。
假設(shè)N==-1,表示輸入結(jié)束。
Output 假設(shè)徐總能到達(dá)目的地,輸出最短的時(shí)間。否則。輸出“-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 盡管偶爾會(huì)迷路,可是由于有了你的幫助 **和**從此還是過(guò)上了幸福的生活。
――全劇終――
Author lgx
Source ACM程序設(shè)計(jì)_期末考試(時(shí)間已定!!) 代碼: #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; }
轉(zhuǎn)載于:https://www.cnblogs.com/wzjhoutai/p/7003384.html
總結(jié)
以上是生活随笔為你收集整理的HDU 2112 HDU Today lt;SPFA算法+map函数gt;的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。