用floyd求最大值。
#include"stdio.h"
#include"string.h"
double map[1010][1010];
#define max(a,b) a>b?a:b貌似这样省时些,不然会超时。。
int main()
{
int m,n,i,j,k,h,p;
while(scanf("%d",&m)!=EOF)
{
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
scanf("%lf",&map[i][j]);
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
if(map[j][i]>0)
{
for(k=1;k<=m;k++)
{
map[j][k]=max(map[j][k],map[j][i]*map[i][k]);
}
}
}
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&p,&h);
if(map[p][h]<=0)
printf("What a pity!\n");
else
printf("%.3lf\n",map[p][h]);
}
}
return 0;
}