#include<stdio.h>
#include<string.h>
#include<stdlib.h>
double dis[1010],map[1010][1010];
int hash[1010];
int n,a,b;
void dijkstra()
{
for(int i=1;i<=n;i++)
{
hash[i]=0;
dis[i]=0;
}//前面吧这部分内容放到了主函数里面,结果不对。
dis[a]=1;
for(int i=1;i<=n;i++)
{
double max=-1;
int pos;
for(int j=1;j<=n;j++)
{
if(hash[j]==0)
{
if(dis[j]>max)
{
max=dis[j];
pos=j;
}
}
}
hash[pos]=1;
if(pos==b) break;
for(int j=1;j<=n;j++)
{
if(hash[j]==0)
{
if(map[pos][j]!=0)
{
if(dis[pos]*map[pos][j]>dis[j])
{
dis[j]=map[pos][j]*dis[pos];
}
}
}
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
map[i][j]=0;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%lf",&map[i][j]);
}
}
int q;
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&a,&b);
dijkstra();
if( dis[b]!=0)
{
printf("%.3lf\n",dis[b]);
}
else
{
printf("What a pity!\n");
}
}
}
//system("pause");
return 0;
}
编辑器加载中...
浙公网安备 33010602011771号