HDU2112:HDU Today(Dijkstra)

来源:互联网 发布:仿制电影淘淘源码下载 编辑:程序博客网 时间:2024/06/11 04:45

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<stdio.h>#include<map>#include<string>using namespace std;#define inf 0x3f3f3f3f int tu[105][105];int di[105],vis[105];void dij(int s,int n){int min,pos,i,j;memset(vis,0,sizeof(vis));for(int i=1;i<n;i++)di[i]=inf;di[s]=0;for(i=s;i<n;i++){min=inf;for(j=s;j<n;j++)if(min>di[j]&&!vis[j]){pos=j;min=di[j];}vis[pos]=1;for(j=s;j<n;j++)if(di[j]>di[pos]+tu[pos][j]&&!vis[j])di[j]=di[pos]+tu[pos][j];}}int main(){map<string,int>ma;<span style="color: rgb(0, 130, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 14px; line-height: 18px; background-color: rgb(248, 248, 248);">//在这里ma的作用是将字符串化为整数存储</span>int n,w;char s1[100],s2[100];while(~scanf("%d",&n),n!=-1){ma.clear();memset(tu,inf,sizeof(tu));//这里没有使tu[i][i]=0的情况int flag=0;scanf("%s%s",s1,s2);if(!strcmp(s1,s2))flag=1;ma[s1]=1,ma[s2]=2;int cnt=3;while(n--){scanf("%s%s%d",s1,s2,&w);if(!ma[s1])//差点因为这里而WA,保证出现相同的站,该站的标号不变ma[s1]=cnt++;if(!ma[s2])ma[s2]=cnt++;if(w<tu[ma[s1]][ma[s2]])tu[ma[s1]][ma[s2]]=tu[ma[s2]][ma[s1]]=w;}if(flag){printf("0\n");continue;}dij(1,cnt);printf("%d\n",di[2]==inf?-1:di[2]);}return 0;}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子上幼儿园不说话怎么办 幼儿写数字不写怎么办 小孩不吃饭怎么办 十个月 十个月小孩不爱吃饭怎么办 十个月的小孩不吃饭怎么办 家长要调幼儿园监控怎么办 自己带孩子婆婆生气怎么办 婆婆老是觉得我奶水不够怎么办 1岁小儿特别懒怎么办 17的孩子很懒怎么办 上大班的孩子不愿写字怎么办 快上中班的小朋友不爱学习怎么办 小学生两边肩膀不平应该怎么办 写字右肩膀疼是怎么办 开车久了肩膀疼怎么办 3岁宝宝撕书怎么办 孩子上幼儿园不爱写字怎么办 一年级小孩不爱做作业怎么办 小孩不愿多做作业怎么办 小孩一年级不自觉做作业怎么办 小孩会读不会写怎么办 好多字都不会写怎么办 写作业怎么办才能写快 五周宝宝爱玩不写字怎么办 爱玩手机的小孩怎么办? 一年级学生记不住生字怎么办 一年级小孩记不住生字怎么办 配镜度数高了怎么办 宝宝两岁半不肯坐马桶拉臭臭怎么办 儿子字写得不好 怎么办 小孩不听话不爱读书和写字怎么办 两岁宝宝不愿意穿衣服怎么办 做题粗心不认真怎么办 5岁宝宝不会写字怎么办 四岁宝宝不会写字怎么办 4岁宝宝不写字怎么办 四岁宝宝不写字怎么办 孩子学习粗心计算能力差怎么办 一年级的小朋友不爱看书怎么办 马上要生了害怕怎么办 孩子做题不爱读题怎么办