• hdu1162


    #include<cstdio>
    #include<cmath>
    #include<climits>
    #include<algorithm>
    #define INF 1000000000
    using namespace std;
    struct p
    {
        double x,y;
    }spot[110];
    double cost[110][110];
    double mincost[110];
    bool used[110];
    int n;
    
    double prim()
    {
        for(int i=0;i<n;i++)
        {
            mincost[i]=INF;
            used[i]=false;
        }
        mincost[0]=0;
        double res=0;
    
        while(true){
            int v=-1;
            for(int i=0;i<n;i++)
                if(!used[i]&&(v==-1||mincost[i]<mincost[v])) v=i;
            if(v==-1) break;
            used[v]=true;
            res+=mincost[v];
            for(int i=0;i<n;i++)
                mincost[i] = min(mincost[i], cost[v][i]);
    
        }
        return res;
    }
    double dis(p a,p b)
    {
        double fa = (a.x-b.x);
        double fb = (a.y-b.y);
        return sqrt(fa*fa+fb*fb);
    }
    int main()
    {
    //    int n;
        while(~scanf("%d",&n))
        {
            for(int i=0;i<n;i++)
                scanf("%lf%lf",&spot[i].x,&spot[i].y);
            for(int i=0;i<n;i++)
            for(int j=i;j<n;j++){
                if(i==j) cost[i][j]=INF;
                else { cost[i][j]=cost[j][i]=dis(spot[i],spot[j]); }
            }
    //        for(int i=0;i<n;i++){
    //        for(int j=0;j<n;j++){
    //            printf("%lf ",cost[i][j]);
    //        }
    //        printf("
    ");
    //        }
    
            printf("%.2lf
    ",prim());
        }
    //    printf("%lf",dis(spot[0],spot[1]));
        return 0;
    }
    

  • 相关阅读:
    1-29反射
    1-28Map简介
    1-27TreeSet简介
    1-26HashSet简介
    1-25泛型
    1-24List三个子类的特点
    1-23集合概述
    Java接口
    1-22日期类型
    简易计算器的实现
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6848304.html
Copyright © 2020-2023  润新知