这个题于找最短路劲相识但是,又有点不同,其想法跟最短路劲的想法,要找到最大的,即要将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;
}

posted on 2012-07-10 23:54  xinmenghuairi  阅读(160)  评论(0编辑  收藏  举报