题意:有很多坐标,求点一到点二的每个通路之中最长的距离,输出最长的距离之中最短的那个。
这道题无关最短路,利用Floyd的遍历,但是关键在于条件。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double path[210][210];
class coordinate
{
public:
double x,y;
}point[210];
int main()
{
int ncase = 1;
while(ncase){
int n;
cin>>n;
if(!n)
break;
for(int i = 1;i <= n; i++)
cin>>point[i].x>>point[i].y;
for(int i = 1;i < n; i++)
for(int j = i + 1;j <= n; j++){
double x1 = point[i].x - point[j].x;
double y2 = point[i].y - point[j].y;
path[i][j] = path[j][i] = sqrt(x1*x1 + y2*y2);
}
for(int k = 1;k <= n; k++)
for(int i = 1;i <= n; i++)
for(int j = 1;j <= n; j++)
if(path[i][k] < path[i][j] && path[k][j] < path[i][j]){
//改变了条件每个路中最长的,并且是最长中的最短,难点就在这里吧
if(path[i][k] > path[k][j])
path[i][j] = path[j][i] = path[i][k];
else
path[i][j] = path[j][i] = path[k][j];
}
printf("Scenario #%d\n",ncase++);
printf("Frog Distance = %.3lf\n\n",path[1][2]);
}
return 0;
}