floyd算法,把加法改成乘法,每次记录最大值就行了,还是输出格式。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f
#define MAXN 1005
using namespace std;
int n;
double pri[MAXN][MAXN];
void floyd(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
pri[j][k]=max(pri[j][k],pri[j][i]*pri[i][k]);
}
int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&pri[i][j]);//直接赋值
floyd();
int q,x,y;
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d%d",&x,&y);
if(pri[x][y]==0)
printf("What a pity!\n");
else
printf("%.3lf\n",pri[x][y]);
}
}
return 0;
}