#include<stdio.h> #include<string.h> #include<stdlib.h> double dis[1010],map[1010][1010]; int hash[1010]; int n,a,b; void dijkstra() { for(int i=1;i<=n;i++) { hash[i]=0; dis[i]=0; }//前面吧这部分内容放到了主函数里面,结果不对。 dis[a]=1; for(int i=1;i<=n;i++) { double max=-1; int pos; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(dis[j]>max) { max=dis[j]; pos=j; } } } hash[pos]=1; if(pos==b) break; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(map[pos][j]!=0) { if(dis[pos]*map[pos][j]>dis[j]) { dis[j]=map[pos][j]*dis[pos]; } } } } } } int main() { while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { map[i][j]=0; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%lf",&map[i][j]); } } int q; scanf("%d",&q); while(q--) { scanf("%d%d",&a,&b); dijkstra(); if( dis[b]!=0) { printf("%.3lf\n",dis[b]); } else { printf("What a pity!\n"); } } } //system("pause"); return 0; }
编辑器加载中...