#include<iostream>
#include<cstring>
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
int cn;
int map[500][500];
const int maxn=999999;
char city[500][500];
int n;
int match(char c[])
{
int i;
//cout<<c<<endl;
for(i=1;i<=cn;i++)
if(strcmp(city[i],c)==0)
return i;
strcpy(city[i-1],c);
cn++;
return i-1;
}
void floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(min(map[i][k],map[k][j])>map[i][j])
{
map[i][j]=min(map[i][k],map[k][j]);
}
}
int main()
{
int m;
int a,b,c;
int t=0;
char city1[100],city2[100],city3[100],city4[100];
while(cin>>n>>m)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=0;
if(m==0&&n==0)
break;
cn=1;
for(int i=1;i<=m;i++)
{
cin>>city1>>city2>>c;
a=match(city1);
b=match(city2);
//cout<<a<<" "<<b<<endl;
map[a][b]=map[b][a]=c;
}
/* for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<map[i][j]<<" ";
cout<<endl;
}*/
floyd();
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<map[i][j]<<" ";
cout<<endl;
}*/
cin>>city3>>city4;
a=match(city3);
b=match(city4);
//cout<<a<<" "<<b<<endl;
cout<<"Scenario #"<<++t<<endl;
cout<<map[a][b]<<" tons"<<endl<<endl;
}
return 0;
}
题意:给出一些城市的名称以及这些城市之间的距离,给出起始位置,求所有路径中最小中的最大。
思路:将名字转换成数字,然后floyd变一下就可以解决了。