Click Here
题意:有n个点,每个点的坐标给出,求第一个点到第二个点的最长路径的最短值。
每条路径的长度为该条路径中最长的一段的长度,求所有路径的最小值(即最长路径的最小值)
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
double e[1010][1010];
#define inf 0x3f3f3f3f
int n,m;
double dis[1010];
int main()
{
int pp=0;
while(~scanf("%d",&n)&&n)
{
pp++;
int i,j,k,p;
p=0;
memset(e,0,sizeof e);
int a[1010],b[1010];
for(i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
e[i][j]=e[j][i]=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])+0.0);
}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
e[i][j]=min(e[i][j],max(e[i][k],e[k][j]));
}
printf("Scenario #%d\n",pp);
printf("Frog Distance = %.3f\n\n",e[1][2]);
}
return 0;
}