Floyd或者Dijkstra水之。。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double min(double a,double b)
{
return a>b?b:a;
}
double max(double a,double b)
{
return a<b?b:a;
}
double distance(double a,double b,double c,double d)
{
double t1,t2;
t1=a-c;
t2=b-d;
return sqrt(t1*t1+t2*t2);
}
int main()
{
int i,j,k,sx,sy,ex,ey,n,map[300][2],T;
double dis[300][300];
T=1;
while (scanf("%d",&n) != EOF)
{
if (n == 0)
break;
for (i=0; i<n; i++)
{
if (i == 0)
{
scanf("%d%d",&sx,&sy);
map[i][0]=sx;
map[i][1]=sy;
}
else if (i == 1)
{
scanf("%d%d",&ex,&ey);
map[i][0]=ex;
map[i][1]=ey;
}
else
{
scanf("%d%d",&map[i][0],&map[i][1]);
}
}
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
dis[i][j]=distance(map[i][0],map[i][1],map[j][0],map[j][1]);
}
}
for (k=0; k<n; k++)
{
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
dis[i][j]=min(dis[i][j], max(dis[i][k],dis[k][j]));
}
}
}
printf("Scenario #%d\n",T);
T++;
printf("Frog Distance = %.3f\n\n",dis[0][1]);
}
}