题意:给出两只青蛙的坐标A、B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的。显然从A到B存在至少一条的通路,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中又有一个最大距离。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。
思路:只需把floyed板子更新条件稍加改变
#include<iostream> #include<algorithm> #include<math.h> #include<string.h> using namespace std; int n,m; const int N=1010; double dist[N][N]; double s[N][N]; double x[N]; double y[N]; void floyed() { for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { //找的是每条路最大值的最小值 dist[i][j]=min(dist[i][j],max(dist[i][k],dist[k][j])); } } } } int main() { int ans=1; while(cin>>n&&n!=0) { for(int i=1;i<=n;i++) { cin>>x[i]>>y[i]; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { //初始化 dist[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } } floyed(); cout<<"Scenario #"<<ans++<<endl; cout<<"Frog Distance = "; printf("%.3lf\n",dist[1][2]); cout<<endl; } }