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