题意:给出n个点,问从点1到点2的一条路径中,每两点之间的距离的最大值的最小值。
dijkstra的变形。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int N=205;
bool vis[N];
int dis[N];
struct node
{
int x,y;
}po[N];
int cal(node &a,node &b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int main()
{
//freopen("in.txt","r",stdin);
int n,t_cnt=0;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
dis[0]=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++) scanf("%d%d",&po[i].x,&po[i].y);
for(int i=1;i<n;i++) dis[i]=cal(po[i],po[0]);
for(int i=1;i<n;i++)
{
int temp=1<<30,pos=0;
for(int j=1;j<n;j++)
{
if(dis[j]<temp&&!vis[j])
{
temp=dis[j];pos=j;
}
}
vis[pos]=1;
for(int j=1;j<n;j++)
{
int temp=cal(po[j],po[pos]);
int imax=max(dis[pos],temp);
if(dis[j]>imax&&!vis[j])
{
dis[j]=imax;
}
}
}
printf("Scenario #%d\n",++t_cnt);
printf("Frog Distance = %.3lf\n\n",sqrt(double(dis[1])));
}
return 0;
}