#include <stdio.h>
#include <string.h>
float c[1010][1010];
float dist[1010];
void dijs(int v,int n)
{
bool s[1010];
for(int i=1;i<=n;i++)
{
dist[i]=c[v][i];
s[i]=0;
}
dist[v]=1; //以起点开始的距离为1所以起点与终点相同时直接为1
s[v]=1;
for(int i=2;i<=n;i++)
{
float temp=0;
int u=v;
for(int k=1;k<=n;k++)
{
if(!s[k]&&dist[k]>temp)
{
u=k;
temp=dist[k];
}
}
s[u]=1;
for(int k=1;k<=n;k++)
{
if(!s[k]&&dist[k]<dist[u]*c[u][k])
dist[k]=dist[u]*c[u][k];
}
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
scanf("%f",&c[i][k]);
int c;
scanf("%d",&c);
while(c--)
{
int s1,s2;
scanf("%d%d",&s1,&s2);
dijs(s1,n);
if(dist[s2]==0)
printf("What a pity!\n");
else
printf("%.3f\n",dist[s2]);
}
}
return 0;
}
原文:http://blog.csdn.net/a73265/article/details/46367551