题目描述:青蛙A要找青蛙B,路径任选,求所有可能路径中跳的最远的一步,它们之中的最小距离值。
输入要求,第一行为石头数,二三行为起点和终点位置,n-2行为其他石头结点。第一行为0使结束。
问题分析:需要知道任意两节点间的距离比较,可以用Flord算法。
#include <iostream>
#include <cmath>
using namespace std;
#define max_n 210//没有分号
#define N2(x) ((x)*(x))
struct pos
{
double x,y;
} ps[max_n];
int n,Case;
double dis[max_n][max_n];
int main()
{
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
cin>>ps[i].x>>ps[i].y;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
dis[i][j]=0;
else
dis[i][j]=sqrt(N2(ps[i].x-ps[j].x)+N2(ps[i].y-ps[j].y));
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],max(dis[i][k],dis[k][j]));
printf("Scenario #%d\nFrog Distance = %.3f\n\n",++Case,dis[1][2]);
}
return 0;
}