3.B - Frogger

题目连接 http://acm.hust.edu.cn/vjudge/B

这题整个看得稀里糊涂。。用了求最小生成树的另一种算法 prime 算法,自己用kruskal算法怎么都做不对,也不知道是

哪里错了。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
pair<int,int>a[200];
double lowcost[200],cost[200];
double map[200][200];
int main()
{
    int n;
    int k=1;
    while(scanf("%d",&n)&&n!=0)
    {
        int i,j;
        for(i=0;i<n;i++)
        scanf("%d %d",&a[i].first,&a[i].second);
        memset(lowcost,0,sizeof(lowcost));
        for(i=0;i<n;i++)
         for(j=0;j<n;j++)
             map[i][j]=sqrt((pow(1.0*(a[i].first-a[j].first),2)+pow(1.0*(a[i].second-a[j].second),2)));
        double ans=0.0;
        for(i=0;i<n;i++)
        {
            lowcost[i]=map[0][i];
            cost[i]=0;
        }
        for(i=0;i<n;i++)
        {
            double m=1.0*(1<<20);
            int x;
            for(j=0;j<n;j++)
                if(lowcost[j]&&lowcost[j]<=m) m=lowcost[x=j];

        if(ans<m)
        ans=m;
        lowcost[x]=0.0;
        if(x==1) break;
        for(j=0;j<n;j++)
        {
            if(map[j][x]<lowcost[j])
            {
                lowcost[j]=map[j][x];
                cost[j]=x;
            }
        }
    }
       printf("Scenario #%d\n",k);
        printf("Frog Distance = %.3lf\n",ans);//%m.n m是域宽,n 是小数点位数
        printf("\n");
        k++;
}
return 0;

}

 

posted @ 2016-07-29 19:03  Twsc  阅读(111)  评论(0)    收藏  举报