标签:
1 #include<stdio.h> 2 #include<string.h> 3 #define MAX(x,y)(x>y?x:y) 4 const int MAXN=1010; 5 double map[MAXN][MAXN],d[MAXN]; 6 int vis[MAXN]; 7 int n; 8 void initial(){ 9 memset(d,0,sizeof(d)); 10 memset(vis,0,sizeof(vis)); 11 } 12 void dijskra(int s){ 13 initial();//写错位置了,应该每次都初始化 14 d[s]=1; 15 while(true){ 16 int k=-1; 17 for(int i=1;i<=n;i++) 18 if(!vis[i]&&(k==-1||d[i]>d[k]))k=i; 19 if(k==-1)break; 20 vis[k]=1; 21 for(int i=1;i<=n;i++) 22 d[i]=MAX(d[i],d[k]*map[k][i]); 23 } 24 } 25 int main(){int Q,a,b; 26 while(~scanf("%d",&n)){ 27 memset(map,0,sizeof(map)); 28 for(int i=1;i<=n;i++) 29 for(int j=1;j<=n;j++) 30 scanf("%lf",&map[i][j]); 31 scanf("%d",&Q); 32 while(Q--){ 33 scanf("%d%d",&a,&b); 34 dijskra(a); 35 if(d[b]==0.0)puts("What a pity!"); 36 else printf("%.3lf\n",d[b]); 37 } 38 } 39 return 0; 40 }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4737550.html