3 1 0.5 0.5 0.5 1 0.4 0.5 0.4 1 3 1 2 2 3 1 3
0.500 0.400 0.500
#include<stdio.h> #include<string.h> #define M -10900000 #define max(a,b) (a)>(b)?(a):(b) double x[1001][1001]; int n,m,q,t; void dijkstra() { int i,j,k; int s[1001]; memset(s,0,sizeof(s)); double p[1001]; for(i=1;i<=n;i++) p[i]=0;//刚开始错写成p[i ]=M; p[q]=1; while(1) { k=-1; for(i=1;i<=n;i++) if(!s[i]&&(k==-1||p[k]<p[i])) k=i; if(k==-1) break; s[k]=1; for(j=1;j<=n;j++) if(k!=j) p[j]=max(p[j],p[k]*x[k][j]);//该地方刚开始忽略了 } if(p[t]) printf("%.3lf\n",p[t]); else printf("What a pity!\n"); } int main() { while(scanf("%d",&n)!=EOF) { int i,j,k; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%lf",&x[i][j]); //if(x[i][j]==0)//x[i][j]=M;该地方多余 } scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d%d",&q,&t); dijkstra(); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/l15738519366/article/details/47731979