uva 534
floyd算法 数据量比较小 就简单了~
/*************************************************************************
> Author: xlc2845 > Mail: xlc2845@gmail.com
> Created Time: 2013年10月31日 星期四 13时55分07秒
************************************************************************/
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <set>
#include <cstdlib>
#define maxn 300
using namespace std;
struct node
{
int x, y;
};
int n;
node lake[maxn];
double dist[maxn][maxn];
double get_dist(int i, int j)
{
return sqrt((lake[i].x - lake[j].x)*(lake[i].x - lake[j].x) + (lake[i].y - lake[j].y)*(lake[i].y - lake[j].y));
}
void floyd()
{
for(int k = 0; k < n; k++)
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
dist[i][j] = min(dist[i][j], max(dist[i][k], dist[k][j]));
}
void init()
{
for(int i = 0; i < n; i++)
scanf("%d%d", &lake[i].x, &lake[i].y);
for(int i = 0; i < n; i++)
for(int k = 0; k < i; k++)
if(k != i)
dist[i][k] = dist[k][i] = get_dist(i, k);
else
dist[i][i] = 0;
}
int main()
{
int ca = 1;
while (scanf("%d",&n) && n)
{
init();
floyd();
printf("Scenario #%d\n", ca++);
printf("Frog Distance = %.3lf\n\n", dist[0][1]);
}
return 0;
}

浙公网安备 33010602011771号