卡在精度上,还是很奇怪的地方,这两天简直醉了...
大意:找出一条路径,从1到2,在这条路径上两点之间的最大距离要最小
#include<stdio.h>
#include<math.h>
struct node
{
double x,y;
}node[500];
int main()
{
int n,x,y;
double dis[500][500];
int ca=0;
while(scanf("%d",&n)&&n!=0)
{
ca++;
for(int i=1;i<=n;i++)
{
scanf("%lf %lf",&node[i].x,&node[i].y); //没错,之前定义是int的,用的%d,后来改成double,忘记改了T_T
}
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
{
double x1=node[i].x-node[j].x;
double y1=node[i].y-node[j].y;
dis[j][i]=dis[i][j]=sqrt(x1*x1+y1*y1);
}
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n-1;i++)
for(int j=i+1;j<=n;j++)
{
if(dis[i][k]<dis[i][j]&&dis[k][j]<dis[i][j])
{
if(dis[i][k]<dis[k][j])
dis[i][j]=dis[j][i]=dis[k][j];
else
dis[i][j]=dis[j][i]=dis[i][k];
}
}
printf("Scenario #%d\n",ca);
printf("Frog Distance = %.3lf\n",dis[1][2]);
printf("\n");
}
return 0;
}