zoukankan      html  css  js  c++  java
  • Lonlife 1000

    1000 - Spoon Devil's 3-D Matrix

    Time Limit:1s Memory Limit:32MByte

    Submissions:208Solved:65

    DESCRIPTION

    Spoon Devil build a 3-D matrix, and he(or she) wants to know if he builds some bases what's the shortest distance to connect all of them.

    INPUT
    There are multiple test cases. The first line of input contains an integer T
    , indicating the number of test cases. For each test case:The first line contains one integer n (0<n<50), indicating the number of all points. Then the next n lines, each lines contains three numbers xi,yi,zi indicating the position of i
    -th point.
    OUTPUT
    For each test case, output a line, which should accurately rounded to two decimals.
    SAMPLE INPUT
    221 1 02 2 031 2 30 0 01 1 1
    SAMPLE OUTPUT
    1.413.97


    思路:

    三维点的MST(Krusal)

    #include<iostream>
    #include<cmath>
    #include<string>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    const int MAXN=55;
    const int MAXM=1200;
    int pre[MAXN];
    struct node
    {
        double x,y,z;
        node()
        {
            x=y=z=0;
        }
    }Node[MAXN];
    struct edge
    {
        int s,e;
        double d;
        edge()
        {
            s=e=d=0;
        }
    }Edge[MAXM];
    bool cmp(edge a, edge b)
    {
        return a.d<b.d;
    }
    int father(int x)
    {
        if(pre[x]==x)
            return x;
        else
        {
            pre[x]=father(pre[x]);
            return pre[x];
        }
    }
    double krusal(int n)
    {
        double cost=0;
        for(int i=0;i<MAXN;i++)pre[i]=i;
        int cnt=0;
        int index=0;
        while(cnt<n-1)
        {
            int ps=father(Edge[index].s);
            int pe=father(Edge[index].e);
            if(ps!=pe)
            {
                pre[ps]=pe;
                cost+=Edge[index].d;
                cnt++;
            }
            index++;
        }
        return cost;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            for(int i=0;i<n;i++)
            {
                scanf("%lf%lf%lf",&Node[i].x,&Node[i].y,&Node[i].z);
            }
            int cnt=0;
            for(int i=0;i<n;i++)
            {
                for(int j=i+1;j<n;j++)
                {
                    Edge[cnt].s=i;Edge[cnt].e=j;
                    Edge[cnt].d=sqrt(pow(fabs(Node[i].x-Node[j].x),2.0)+pow(fabs(Node[i].y-Node[j].y),2.0)+pow(fabs(Node[i].z-Node[j].z),2.0));
                    cnt++;
                }
            }
            sort(Edge,Edge+cnt,cmp);
            printf("%.2lf
    ",krusal(n));
        }
        return 0;
    }
    


  • 相关阅读:
    moss jscript
    CSS两端对准
    简单的日期格式验证
    .NET中使用Exchange 2007 Webservice来读取邮件
    张二狗
    spcontext
    Infopath表单用改控件值提交或作别的更改时一定要在控件属性浏览器表单的回发设置为始终.
    使用 Web 服务
    SharePoint 2010中开发模式的改进 COM 客户端对象模型
    Retrieve data from Separate Oracle System
  • 原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776022.html
Copyright © 2011-2022 走看看