题意:
在第一块石头到到第二块石头的通路中,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中有一个最大距离,如果有多条通路,则求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离输出。
Floyd变形。。。。阿欧。。说实话 还是半懂半不懂 。。先立个标记。。。过几天再看看。。。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #define mem(a,b) memset(a,b,sizeof(b)) using namespace std; const int maxn = 202, INF = 2000; struct edge{ double x,y; }Edge[maxn]; double d[maxn][maxn]; int main() { int n,cnt = 0; while(cin>>n && n) { for(int i=1;i<=n;i++) cin>>Edge[i].x>>Edge[i].y; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j] = d[j][i] = sqrt(pow(Edge[i].x-Edge[j].x,2)+pow(Edge[i].y-Edge[j].y,2)); 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])); printf("Scenario #%d\n",++cnt); printf("Frog Distance = %.3f\n",d[1][2]); cout<<endl; } return 0; }