6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
50
/*
HDOJ 2112 最短路問題 加了一個字符串處理
想到用map+floyd 實現
*/
#include<iostream>
#include<stdio.h>
#include<map>
#include<string>
using namespace std;
#define MAX 9999999
int mm[155][155];
map<string,int> v;
void Floyd(int maxn)
{
int i,j,k;
for(k=1;k<=maxn;k++)
for(i=1;i<=maxn;i++)
{
if(mm[i][k]!=MAX)
for(j=1;j<=maxn;j++)
{
if(mm[i][j]>mm[i][k]+mm[k][j])
mm[i][j]=mm[i][k]+mm[k][j];
}
}
}
int main()
{
int i,j,n,k,c,flag;
char start[55],end[55],s1[55],s2[55];
//freopen("test.txt","r",stdin);
while(scanf("%d",&n))
{
if(n==-1) break;
v.clear();
flag=0;
k=3;
scanf("%s",start);
scanf("%s",end);
v[start]=1;//起始點,終點為1,2
v[end]=2;
if(strcmp(start,end)==0)
flag=1;//始終點一樣要特殊處理
for(i=1;i<155;i++)
for(j=1;j<155;j++)
mm[i][j]=MAX;
for(i=1;i<=n;i++)
{
scanf("%s",s1);
scanf("%s",s2);
if(!v[s1])
v[s1]=k++;
if(!v[s2])
v[s2]=k++;
scanf("%d",&c);
if(mm[v[s1]][v[s2]]>c)
mm[v[s1]][v[s2]]=mm[v[s2]][v[s1]]=c;
}
if(flag)
{
printf("0\n");
continue;
}
Floyd(k-1);//k-1就是城市的總數
printf("%d\n",mm[1][2]==MAX?-1:mm[1][2]);
}
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。