标签:
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