题目链接
http://poj.org/problem?id=2253
题意
给出青蛙A,B和若干石头的坐标,现在青蛙A要跳到青蛙B所在的石头上,求出所有路径中最远那一跳的最小值。
思路
Floyd算法的变形,将求两点之间的最短路改成求两点之间最大边权的最小值即可。
代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; const int N = ;
int x[N];
int y[N];
double dist[N][N];
int n; double get_dist(int i, int j)
{
return sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
} void floyd()
{
for(int k=; k<n; k++)
for(int i=;i<n; i++)
for(int j=; j<n; j++)
dist[i][j] = min(dist[i][j], max(dist[i][k], dist[k][j]));
} int main()
{
//freopen("poj2253.txt", "r", stdin);
int kase = ;
while(cin>>n && n)
{
memset(x, , sizeof(x));
memset(y, , sizeof(y)); for(int i=; i<n; i++)
cin>>x[i]>>y[i]; for(int i=; i<n; i++)
for(int j=; j<n; j++)
dist[i][j] = get_dist(i, j); floyd(); printf("Scenario #%d\n", kase++);
printf("Frog Distance = %.3f\n\n", dist[][]);
}
return ;
}
注意点
1、由于距离是double类型,输出的时候是可以用%.3lf的,但这题使用%.3lf会WA,要使用%.3f 来输出。