#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
double dist[201],grid[201][201];
int visit[201],n;
structnode
{
double x,y;
}g[201];
double Dijkstra()
{
double maxn,minc;
int num=1,k,i;
memset (visit,0,sizeof(visit));
for (i = 1; i <= n; i++)
dist[i] = grid[1][i];
visit[1]=1;
dist[1]=0;
while(num++<n) //当num小于图中的顶点的个数
{
minc=INF;
for (i=1;i<=n;i++)
if(!visit[i] && dist[i]<minc)
{k=i;minc=dist[i];}
visit[k]=1;
for (i=1;i<=n;i++)
{
maxn=max(dist[k],grid[k][i]);
dist[i]=min(maxn,dist[i]);
}
}
return dist[2]; //dist[1]是0;
}
int main()
{
int p=1,j,i;
double x,y;
while ( scanf("%d",&n)!=EOF && n)
{
memset(g,0,sizeof(g));
memset(grid,0,sizeof(grid));
for(i=1;i<=n;i++)
{
scanf("%lf%lf",&x,&y);
g[i].x=x;
g[i].y=y;
}
for (i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
grid[i][j]=grid[j][i]=sqrt((g[i].x-g[j].x)*(g[i].x-g[j].x)+(g[i].y-g[j].y)*(g[i].y-g[j].y));
printf("Scenario #%d\n",p++);
printf("Frog Distance = %.3f\n\n",Dijkstra());
}
return 0;
}
转载于:https://www.cnblogs.com/You-Change/p/3477422.html