zoukankan      html  css  js  c++  java
  • hdu 1162

    include<cstdio>
    #include<iostream>
    #include<string.h>
    #include<cmath>
    #define maxn 105
    #define inf 9999999
    struct node
    {
        double x,y;    
    }stu[maxn];
    int vis[maxn],n;//用来表示点是否在集合里 
    double mincost[maxn];//用来记录从集合出来到每个点的最小距离 
    double mapp[maxn][maxn];
    using namespace std;
    double get_len(node a,node b)
    {
        return sqrt(pow(a.x-b.x,2.0)+pow(a.y-b.y,2.0));
    }
    void build_map()
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=i;j<=n;j++)
            {
                double len=get_len(stu[i],stu[j]);
                mapp[i][j]=mapp[j][i]=(i==j)?0:len;
            }
        }
    }
    void init()
    {
        memset(vis,0,sizeof(vis));
    }
    double minn(double x,double y)
    {
        if(x-y>0) return y;
        else return x;
    }
    void prim()
    {
        fill(mincost,mincost+n+1,inf);
        mincost[1]=0;
        double res=0;
        while(1)
        {
            int v=-1;
            for(int i=1;i<=n;i++)    if(!vis[i]&&(v==-1||mincost[i]<mincost[v])) v=i;//找出离集合最近的点 
            if(v==-1) break;
            vis[v]=1;
            res+=mincost[v];
            for(int i=1;i<=n;i++) mincost[i]=minn(mincost[i],mapp[v][i]);
        }
        printf("%.2f
    ",res);
    }
    int main()
    {
        while(~scanf("%d",&n))
        {
            init();
            for(int i=1;i<=n;i++) scanf("%lf %lf",&stu[i].x,&stu[i].y);
            build_map();
            prim();
    
        }
        return 0;
    }
  • 相关阅读:
    vue.js 首屏优化
    ios判断是否有中文
    ios 7新特性
    NSDictionary的分类
    asiHttpRequst 超时代码判断
    ios中layoutsubview何时被调用
    ios中tableview的移动添加删除
    ios发布
    新浪博客中放大图片的做法
    ios中coredata
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5804460.html
Copyright © 2011-2022 走看看