分析:
Floyd算法
用Floyd算法求出两两最短路,再求出从每个点开始的最长路,最后从这n个最长路中求出最小的那个即为所求。
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; #define N 205 const double inf=1000000000.0; struct node { double x,y; } t[N]; double w[N][N]; double M(double x1,double y1,double x2,double y2) { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } int main() { int n; int l=1; while(scanf("%d",&n)!=EOF&&n) { int i,j,k; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { w[i][j]=inf; } } for(i=1; i<=n; i++) { scanf("%lf%lf",&t[i].x,&t[i].y); } double MIN=inf; for(i=1; i<n; i++) { for(j=i+1; j<=n; j++) { w[i][j]=M(t[i].x,t[i].y,t[j].x,t[j].y); } } for(k=1; k<=n; k++) { for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { w[j][i]=w[i][j]=min(w[i][j],max(w[i][k],w[k][j]));//求最大中的最小 } } } printf("Scenario #%d\n",l++); printf("Frog Distance = %0.3lf\n",w[1][2]); printf("\n"); } return 0; }