1、这道题竟是用Floyd算法,很灵活,要不是上网搜题解还真想不到。证明算法导论上有,但我没看懂,一定要抽空再看一看。
2、要是网络赛前做了这道题,那道跟这个非常相似的题说不定就做出来了。唉,还需要努力啊!
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int INF=100000010;
int G[110][110];
int main()
{
//freopen("a.txt","r",stdin);
int C,S,Q,a,b,temp,cnt=0;
bool flag=false;
while(scanf("%d%d%d",&C,&S,&Q)==3){
if(C==0&&S==0&&Q==0) break;
if(flag) printf("\n");
else flag=true;
printf("Case #%d\n",++cnt);
for(int i=1;i<=C;i++)
for(int j=1;j<=C;j++)
if(i==j) G[i][j]=0;
else G[i][j]=INF;
for(int i=0;i<S;i++){
scanf("%d%d%d",&a,&b,&temp);
G[a][b]=G[b][a]=temp;
}
for(int k=1;k<=C;k++)
for(int i=1;i<=C;i++)
for(int j=1;j<=C;j++)
G[i][j]=min(G[i][j],max(G[i][k],G[k][j]));
for(int i=0;i<Q;i++){
scanf("%d%d",&a,&b);
if(G[a][b]!=INF)
printf("%d\n",G[a][b]);
else printf("no path\n");
}
}
return 0;
}