Frogger POJ - 2253
思路:先建图,把坐标存储下来,再计算任意两点间的距离最后用Floyd,d[1][2]就是所求答案
注意:认真读题
具体代码如下
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
#include<cmath>
using namespace std;
const int N = 1010, INF = 1e9;
struct node{
int x, y;
};
int n;
double d[N][N];
void floyd(){
for(int k=1; k<=n; ++k)
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j)
d[i][j] = min(d[i][j], max(d[i][k], d[k][j]));//本题的特殊之处
}
int main(){
int kase = 0;
while(scanf("%d", &n) == 1 && n){
vector<node> v(n+1);
for(int i=1; i<=n; ++i){
int a, b;
scanf("%d%d", &a, &b);
v[i] = {a, b};
}
for(int i=0; i<=1000; ++i)
for(int j=0; j<=1000; ++j)
if(i == j) d[i][j] = 0;
else d[i][j] = INF;
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j){
if(i == j) continue;
d[i][j] = sqrt((v[i].x - v[j].x)*(v[i].x - v[j].x)+(v[i].y - v[j].y)*(v[i].y - v[j].y));
}
floyd();
printf("Scenario #%d\n", ++kase);
printf("Frog Distance = %.3f\n", d[1][2]);
puts("");
}
return 0;
}