这个题于找最短路劲相识但是,又有点不同,其想法跟最短路劲的想法,要找到最大的,即要将dis[i]和hash[i]全部处理为0,寻找更新时要找最大值,然后其他的都相识,短路劲dis[i]=map[起始端][i],hash[i]=0,hash[起始端]=1;
代码:
#include<iostream>
using namespace std;
double map[1002][1002];
double dis[1002];
int n,q,hash[1002];
int se[1002][3];
void djs(int v,int v1)
{
int i,j,index;
double mi;
for(i=1;i<=n;i++)
{
dis[i]=0;
hash[i]=0;
}
dis[v]=1;
for(i=1;i<=n;i++)
{
mi=-1;
index=0;
for(j=1;j<=n;j++)
{
if(!hash[j]&&dis[j]>mi)
{
index=j;
mi=dis[j];
}
}
hash[index]=1;
for(j=1;j<=n;j++)
{
if(!hash[j]&&dis[j]<dis[index]*map[index][j])
dis[j]= dis[index]*map[index][j];
}
}
if(dis[v1]!=0)
printf("%.3f\n",dis[v1]);
else
printf("What a pity!\n");
}
int main()
{
double x;
int i,j;
while(cin>>n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cin>>x;
map[i][j]=x;
}
cin>>q;
for(i=1;i<=q;i++)
{
cin>>se[i][1]>>se[i][2];
djs(se[i][1],se[i][2]);
}
}
return 0;
}