hdu1596
很简单的一道dijkstr模板题,硬是让我RE了一个上午,可恨!这道题map[i][j]的取值范围是[0,1]。结果,我把inf设置为0!kao,莫名其妙的RE接踵而至。快整死我了,后来吧inf改为-100。立刻AC!吐血啊
以后在没把握的情况下,远离边界。
AC:
#include<stdio.h>
#define inf -100 //问题就在这儿
double map[1010][1010]; //注意重边
double d[1010];
int s[1010];
int n;
double dij(int v,int e)
{
int i,j,pos;
double max;
for(i=1;i<=n;i++)
{
s[i]=0;
d[i]=map[v][i];
}
s[v]=1;
d[v]=1; //自己到自己的安全系数为1
for(i=1;i<n;i++)
{
max=inf;
for(j=1;j<=n;j++)
{
if(!s[j]&&max<d[j])
{
pos=j;
max=d[j];
}
}
s[pos]=1;
if(pos==e||max==inf) break;
for(j=1;j<=n;j++)
{
if(!s[j]&&d[j]<(d[pos]*map[pos][j]))
d[j]=d[pos]*map[pos][j];
}
}
return d[e];
}
int main()
{
int i,j,k;
int q;
int a,b;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%lf",&map[i][j]);
}
}
scanf("%d",&q);
for(i=1;i<=q;i++)
{
scanf("%d%d",&a,&b);
if(a==b)
printf("%.3lf\n",map[a][b]);
else
{
if(dij(a,b)>0)
printf("%.3lf\n",dij(a,b));
else
printf("What a pity!\n");
}
}
}
return 0;
}