floy 變形記
最短路的又一種玩法
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 1000;
int x[maxn],y[maxn],n;
double ma[maxn][maxn];
void floyd()
{
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
ma[i][j]=min(ma[i][j],max(ma[i][k],ma[k][j]));
}
int main()
{
int q=1;
while(~scanf("%d",&n)&&n)
{
memset(ma,0, sizeof(ma));
for(int i=1; i<=n; i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=1; i<=n; i++)
for(int j=i+1; j<=n; j++)
ma[i][j]=ma[j][i]=sqrt(double(x[i]-x[j])*(x[i]-x[j])+double(y[i]-y[j])*(y[i]-y[j]));
floyd();
printf("Scenario #%d\nFrog Distance = %.3lf\n\n",q++,ma[1][2]);
}
return 0;
}