HDU
来源:互联网 发布:生命之花 伤感网络歌曲 编辑:程序博客网 时间:2024/06/01 07:53
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市�善终蛱找Υ迓蛄烁龇孔樱�开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
6xiasha westlakexiasha station 60xiasha ShoppingCenterofHangZhou 30station westlake 20ShoppingCenterofHangZhou supermarket 10xiasha supermarket 50supermarket westlake 10-1
50Hint:The best route is:xiasha->ShoppingCenterofHangZhou->supermarket->westlake
思路:重点是站点名字转化成数字,然后最短路
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<map>using namespace std;#define inf 99999999map<string,int>m;int Map[155][155];int book[155],vis[155];int n,st,en;int init(){ int i,j; for(i=0;i<155;i++){ for(j=0;j<155;j++){ Map[i][j]=inf; } book[i]=inf; }}void spfa(){ // memset(vis,0,sizeof(vis)); queue<int>q; while(!q.empty()) q.pop(); book[st]=0;//是起点到这个点的步数 q.push(st); vis[st]=1; while(!q.empty()){ st=q.front(); q.pop(); // vis[st]=0; for(int i=1;i<=n;i++){ if( book[i]>(Map[st][i]+book[st])){//更新起点到这个点的最短路 book[i]=Map[st][i]+book[st]; //if(!vis[i]){//主要是如果队列的点不能再入了,数据小的话没影响 q.push(i); // vis[i]=1; // } } } }}int main() { int t,i,j; char s1[35],s2[35]; int a,b,c; while(scanf("%d",&t) && t!=-1) { n=0; init(); m.clear(); scanf("%s%s",s1,s2); m[s1]=++n;//把站名转化成数字 st=n; if(!m[s2]) {//判断这个站是否已经被映射 m[s2]=++n; } en=m[s2]; // printf("st=%d en=%d\n",st,en); while(t--){ // printf("t=%d\n",t); scanf("%s%s%d",s1,s2,&c); // printf("%s %s %d\n",s1,s2,c); if(!m[s1]){ m[s1]=++n; } a=m[s1]; // printf("a=%d\n",a); if(!m[s2]){ m[s2]=++n; } b=m[s2]; if(Map[a][b]>c){ Map[a][b]=c; Map[b][a]=c;//双向路 } // printf("Map[%d][%d]=%d\n",a,b,c); } if(st==en){ printf("0\n"); continue; } spfa(); if(book[en]==inf) printf("-1\n");//如果这个店没被走过 else printf("%d\n",book[en]); } return 0;}
0 0