最短的变形 Frogger POJ-2253

题意:找到一条可以链接所有点的路,这条路的的最大的边的权值小于等于其他路的最大边的权值

AC代码:

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#define MAX 1<<30;
#include<cmath>
#include<iomanip>
using namespace std;
struct node
{
    int x;
    int y;
}z[300];
int a,b,c,l,m,n,h,e;
bool biao[300];
double d[300];
double p[300][300];
double ro(node b,node c)
{
    return sqrt((double)((b.x-c.x)*(b.x-c.x)+(b.y-c.y)*(b.y-c.y)));
}
void dk()
{
    memset(biao,0,sizeof(biao));
    for(int i = 0; i<a; i++)
        d[i] =MAX;
    d[0]=0;
    for(int i = 0; i<a; i++)
    {
        double minn = MAX;
        int pos;
        for(int j = 0; j<a; j++)
        {
            if(d[j]<minn && !biao[j])
            {
                pos = j;
                minn = d[j];
            }
        }
        biao[pos] = 1;
        for(int j = 0; j<a; j++)
        {
            d[j]=min(d[j],max(d[pos],p[pos][j]));
        }
    }
}
int main()
{
    int o=1;
    while(~scanf("%d",&a)&&a)
    {
       for(int i=0;i<a;i++)
            cin>>z[i].x>>z[i].y;
        for(int i=0;i<a;i++)
        {
            for(int j=i+1;j<a;j++)
            {
                p[i][j]=p[j][i]=ro(z[i],z[j]);
            }
        }
        dk();
        printf("Scenario #%d\n",o);
        printf("Frog Distance = %.3lf\n",d[1]);
        printf("\n");
        o++;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/soul778888/article/details/80372024