zoukankan      html  css  js  c++  java
  • poj 2031 Building a Space Station 夜

    http://poj.org/problem?id=2031

    三维最小生成树

     1 #include<iostream>
     2 #include<cmath>
     3 #include<string>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #include<cstdio>
     8 
     9 using namespace std;
    10 
    11 const int N=105;
    12 struct node
    13 {
    14     double x,y,z;
    15     double r;
    16 }mem[N];
    17 double dist[N][N];
    18 double finddist(int i,int j)
    19 {
    20     double dt=sqrt((mem[i].x-mem[j].x)*(mem[i].x-mem[j].x)
    21                 +(mem[i].y-mem[j].y)*(mem[i].y-mem[j].y)
    22                    +(mem[i].z-mem[j].z)*(mem[i].z-mem[j].z));
    23     //cout<<mem[i].x<<" "<<mem[j].x<<endl;
    24     //cout<<dt<<endl;
    25     dt=dt-mem[i].r-mem[j].r;
    26     if(dt<0.0)
    27     dt=0.0;
    28     //cout<<i<<" "<<j<<" "<<dt<<endl;
    29     return dt;
    30 }
    31 int main()
    32 {
    33     int n;
    34     while(scanf("%d",&n)!=EOF,n)
    35     {
    36         for(int i=1;i<=n;++i)
    37         {
    38             scanf("%lf %lf %lf %lf",&mem[i].x,&mem[i].y,&mem[i].z,&mem[i].r);
    39             for(int j=1;j<i;++j)
    40             {
    41                 dist[i][j]=dist[j][i]=finddist(i,j);
    42             }
    43         }
    44             double ans=0.0;
    45             bool had[N];
    46             memset(had,false,sizeof(had));
    47             had[1]=true;
    48             for(int w=1;w<n;++w)
    49             {
    50                 double Min=200000.0;
    51                 int k=0;
    52                 for(int i=1;i<=n;++i)
    53                 {
    54                     if(had[i])
    55                     {
    56                        for(int j=2;j<=n;++j)
    57                        {
    58                            if(!had[j]&&dist[i][j]<Min)
    59                            {
    60                                Min=dist[i][j];
    61                                k=j;
    62                            }
    63                        }
    64                     }
    65                 }
    66                 ans=ans+Min;
    67                 had[k]=true;
    68             }
    69             printf("%.3f\n",ans);
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    11 对象的构造
    10 问题分析一
    9 新型的类型转换
    8 C++ 中的新成员
    7 函数重载
    6 函数参数的扩展
    5 内联函数
    查找算法总结Java实现
    九大排序算法Java实现
    帝国cms所有一级栏目遍历,如果有子栏目的话,遍历出来
  • 原文地址:https://www.cnblogs.com/liulangye/p/2496971.html
Copyright © 2011-2022 走看看