hdu2112HDU Today(最短路+map)

本文介绍了一个公交路线规划问题,通过构建图模型并使用Floyd算法求解最短路径,帮助用户找到从起点到终点的最快路线。问题设定考虑了实际应用中的多个限制条件。
HDU Today
Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

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

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


虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。

――全剧终――
将字符串变成数字就行了;
注意0的情况
#include<stdio.h>
#include<map>
#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
int ma[200][200];
int main()
{
	int n,m;
	while(scanf("%d",&n)&&n!=-1)
	{for(int i=1;i<150;i++)
	for(int j=1;j<150;j++)
	if(i==j)
	ma[i][j]=0;
	else
	ma[i][j]=1000000;
	map<string,int>q;
	q.clear();
	char s1[50],s2[50];
	int l,k=1,o=0;
	scanf("%s%s",s1,s2);
	if(strcmp(s1,s2)==0)
	o=1;
	if(q[s1]==0)
	q[s1]=k++;
	if(q[s2]==0)
	q[s2]=k++;
	for(int i=1;i<=n;i++)
	{scanf("%s%s%d",s1,s2,&l);
      if(q[s1]==0)
	 q[s1]=k++;
	 if(q[s2]==0)
	 q[s2]=k++;
	 ma[q[s1]][q[s2]]=ma[q[s2]][q[s1]]=l;
}
for(int i=1;i<=k;i++)
for(int j=1;j<=k;j++)
for(int h=1;h<=k;h++)
if(ma[j][h]>ma[j][i]+ma[i][h])
ma[j][h]=ma[j][i]+ma[i][h];
if(o==1)
printf("0\n");
else{
if(ma[1][2]==1000000)
printf("-1\n");
else
printf("%d\n",ma[1][2]);
}}}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值