杭电2122 HDU Today (最短路 dijkstra 过)

来源:互联网 发布:puppy linux 5.7 中文 编辑:程序博客网 时间:2024/04/28 12:18

HDU Today

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 21353    Accepted Submission(s): 5094


Problem Description
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,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
6xiasha westlakexiasha station 60xiasha ShoppingCenterofHangZhou 30station westlake 20ShoppingCenterofHangZhou supermarket 10xiasha supermarket 50supermarket westlake 10-1
 

Sample Output
50Hint:The best route is:xiasha->ShoppingCenterofHangZhou->supermarket->westlake虽然偶尔会迷路,但是因为有了你的帮助**和**从此还是过上了幸福的生活。――全剧终――

这个题目和裸的最短路的题目差别在于地点给的不是数字而是字符串,我们这里应用STL中的map直接搞定:

#include <iostream>#include<stdio.h>#include<string.h>#include<map>#include<algorithm>using namespace std;#define N 0x1f1f1f1fint w[151][151];int d[155];char a[31],b[31];int ans,vis[151];void Dij(){int i,j,k,v,tmp;memset(vis,0,sizeof(vis));for(i=1;i<ans;i++)    d[i]=w[1][i];d[1]=0;vis[1]=1;for(i=1;i<=ans;i++){tmp=N;for(j=1;j<=ans;j++){if(tmp>d[j]&&!vis[j]){tmp=d[j];v=j;}}vis[v]=1;for(k=1;k<=ans;k++){if(!vis[k])d[k]=min(d[k],d[v]+w[v][k]);}}}int main(){int i,j,c,test,k;map<string,int> s;while(scanf("%d",&test)&&test!=-1){k=0,ans=3;s.clear();//初始化。scanf("%s%s",a,b);if(!strcmp(a,b))   k=1;s[a]=1,s[b]=2;for(i=1;i<=150;i++){for(j=1;j<=150;j++)if(i==j)w[i][j]=w[j][i]=0;elsew[i][j]=w[j][i]=N;}while(test--){scanf("%s%s%d",a,b,&c);if(!s[a]) s[a]=ans++;if(!s[b]) s[b]=ans++;w[s[a]][s[b]]=w[s[b]][s[a]]=min(w[s[a]][s[b]],c);    }    if(k==1)    printf("0\n");    else{    Dij();    if(d[2]<N)        printf("%d\n",d[2]);    else        printf("-1\n");    }}return 0;}


















0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 毕业生登记表写错了怎么办 高等学校毕业生登记表写错了怎么办 眼睛里迷了东西怎么办 眼睛迷了怎么办小绝招 isf货物离港申报怎么办 非农户口没住房怎么办 在工厂上班很累怎么办 退货运费太贵了怎么办 悬肘写字手抖怎么办 护士成绩合格证明丢了怎么办 找工作真难找好烦怎么办 大夫说身体不适合怀孕有了怎么办 不知道要做什么工作怎么办 红米note4x闪退怎么办 魅蓝note3闪退怎么办 红米note2闪退怎么办 安卓不支持计步怎么办 银行多扣了钱怎么办 网络配置器没了怎么办 班里丢钱了应该怎么办 初级会计考过了怎么办 教师职称证丢了怎么办 会计初级证丢了怎么办 工作遭同事不满否认质疑怎么办 单位领导不让进收入财务怎么办 事业单位50岁不愿退休的怎么办 回美国i20丢了怎么办 i20忘签字美国入境怎么办 社保基数报错了怎么办 公司合同没给我怎么办 给客户报错价格怎么办 给客户报价低了怎么办 报价失误报低了怎么办 期望薪资说低了怎么办 期望薪资说高了怎么办 面试工资说低了怎么办 期望薪资谈低了怎么办 请年假公司不批怎么办 期望工资填低了怎么办 面试工资要高了怎么办 找工作期望薪资写低了怎么办