http://acm.hdu.edu.cn/showproblem.php?pid=1596
简单 jijkstra;
#include<cstdio>
#include<cstring>
#define N 1005
double dis[N],map[N][N];
int vis[N],n,m;
void dijkstra(int x)
{
for(int i=1;i<=n;i++)
{
dis[i]=map[x][i];
vis[i]=0;
}
dis[x]=0;
vis[x]=1;
int k;
double m=0.0;
for(int i=1;i<=n;i++)
{
m=0.0;
for(int j=1;j<=n;j++)
{
if(dis[j]>m&&!vis[j])
{
k=j;
m=dis[j];
}
}
if(m==0.0)break;
vis[k]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<dis[k]*map[k][j])
dis[j]=dis[k]*map[k][j];
}
}
}
int main()
{
int x,y;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%lf",&map[i][j]);
//memset(vis,0,sizeof(vis));
//memset(dis,0,sizeof(dis));
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&x,&y);
dijkstra(x);
if(!dis[y]) printf("What a pity!\n");
else printf("%.3lf\n",dis[y]);
}
}
return 0;
}