DP
代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
int point[1001][2];
double e[1005][1005];
double inf=999999;
long num=0;
double max(double x,double y);
double distance(int x,int y,int x1,int y1);
int main()
{
int i,j,k,n,x,y;
while(~scanf("%d",&n) && n)
{
num++;
memset(e,0,sizeof(e));
for(i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
point[i][0]=x;
point[i][1]=y;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i==j) e[i][j]=0;
else e[i][j]=inf;
}
}
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
e[i][j]=e[j][i]=distance(point[i][0],point[i][1],point[j][0],point[j][1]);
}
}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(e[i][j]>e[i][k]&&e[i][j]>e[k][j])
e[i][j]=max(e[i][k],e[k][j]);
}
}
}
printf("Scenario #%d\n",num);
printf("Frog Distance = %.3f\n",e[1][2]);
puts("");
}
return 0;
}
double distance(int x,int y,int x1,int y1)
{
return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
}
double max(double x,double y)
{
if(x>y) return x;
else return y;
}