POJ2253 Frogger

题意:

在第一块石头到到第二块石头的通路中,每一条通路的元素都是这条通路中前后两个点的距离,这些距离中有一个最大距离,如果有多条通路,则求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离输出。

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;
}

猜你喜欢

转载自www.cnblogs.com/WTSRUVF/p/9108344.html
今日推荐