已知平面上有一些点,任意两点之间都有边,边的长度为两端点的欧氏距离,一条经过多个点的路的长度为在这条路上的边的值的最大值,求从点1到点2的最短路
tip: POJ里边double类型要用%f输出而不能用%lf
最短路的小变化..用哪种最短路都行..这里用的floyd
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
using namespace std;
struct Point {
int x,y;
void read() {
scanf("%d%d",&x,&y);
}
};
double a[220][220];
double c[220];
Point b[220];
int n;
double cal(Point &a,Point &b) {
int x=a.x-b.x;
int y=a.y-b.y;
return sqrt((double)(x*x+y*y));
}
double max(double a,double b) {
if (a<b) return b;
return a;
}
int main() {
int i,j,k,cas=0;
while (scanf("%d",&n),n) {
for (i=0;i<n;i++) b[i].read();
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
a[i][j]=cal(b[i],b[j]);
}
}
for (k=0;k<n;k++)
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (max(a[i][k],a[k][j])<a[i][j]) a[i][j]=max(a[i][k],a[k][j]);
printf("Scenario #%d\n",++cas);
printf("Frog Distance = %.3f\n",a[0][1]);
printf("\n");
}
return 0;
}