http://acm.hdu.edu.cn/showproblem.php?pid=1596
模板题
#include<stdio.h> #include<stdlib.h> #define N 1005 int n,m; float map[N][N],dis[N][N]; void floyd() { int i,j,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++) dis[i][j]=map[i][j]; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(dis[i][j]<dis[i][k]*dis[k][j]) dis[i][j]=dis[i][k]*dis[k][j]; } int main(void) { int i,j,s,t; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%f",&map[i][j]); floyd(); scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d%d",&s,&t); if(dis[s][t]==0) printf("What a pity!\n"); else printf("%.3f\n",dis[s][t]); } } return 0; }