题目链接:https://odzkskevi.qnssl.com/9d40f7d26b050f73bdbcd8167ba8c0bb?v=1534353082
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,t;
int d[105][105];
const int inf=10000001;
void floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
d[i][j]=min(d[i][j],max(d[i][k],d[k][j]));
}
}
}
}
int main(){
int cnt=0;
while(~scanf("%d%d%d",&n,&m,&t)){
if(!n&&!m&&!t)
break;
if(cnt>0)
printf("\n");
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)
d[i][j]=0;
else
d[i][j]=inf;
}
}
int a,b,c;
for(int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
d[a][b]=d[b][a]=c;
}
printf("Case #%d\n",++cnt);
floyd();
int p,q;
for(int i=1;i<=t;i++){
scanf("%d%d",&p,&q);
if(d[p][q]<inf)
printf("%d\n",d[p][q]);
else
printf("no path\n");
}
}
return 0;
}