#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;
const int maxn=1005;
const double eps=1e-6;
const double inf=0xffffffff;
struct node{
double x,y,h;
}no[maxn];
int n;
bool visited[maxn]; double weight[maxn][maxn],c[maxn][maxn],d[maxn][maxn];
double up,down;
double dis(node &a,node &b){
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
void creattree(int n,double r)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
weight[i][j]=c[i][j]-r*d[i][j];
}
}
void prime()
{
up=0.0;down=0.0;
memset(visited,0,sizeof(visited));
int index;
int pre[maxn];
double dist[maxn];
visited[1]=1;
for(int i=0;i<n;i++)
{
dist[i]=weight[1][i];
pre[i]=1;
}
for(int i=0;i<n;i++)
{
double mmimum=inf;
for(int j=0;j<n;j++)
{
if(!visited[j]&&dist[j]<mmimum)
{
mmimum=dist[j];
index=j;
}
}
visited[index]=1;
up+=c[pre[index]][index];
down+=d[pre[index]][index];
for(int i=0;i<n;i++)
{
if(!visited[i]&&weight[index][i]<dist[i])
{
dist[i]=weight[index][i];
pre[i]=index;
}
}
} }
int main()
{
while(scanf("%d",&n),n)
{
for(int i=0;i<n;i++)
{
scanf("%lf%lf%lf",&no[i].x,&no[i].y,&no[i].h);
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
c[i][j]=fabs(no[i].h-no[j].h);
d[i][j]=dis(no[i],no[j]);
}
double r=30.0,ans=30.0;
while(1)
{
creattree(n,r);
prime();
r=up/down;
if(fabs(r-ans)<=eps)break;
else ans=r;
}
printf("%.3lf\n",ans);
//cout<<fixed<<setprecision(3)<<ans<<endl; }
}

最新文章

  1. 我的毕业设计——基于安卓和.NET的笔记本电脑远程控制系统
  2. VMware Workstation安装MAC OS X系统
  3. 20160621-BAPI 更改外向DN&amp;更改拣配
  4. java 输入输出 函数对象构造
  5. Java按位置解析文本文件(使用Swing选择文件)
  6. cakephp recursive -1,0,1,2 速查
  7. 使用堆栈结构进行字符串表达式(&quot;7*2-5*3-3+6/3&quot;)的计算
  8. MFC对话框屏蔽Enter和ESC键
  9. Ionic3学习笔记(四)修改返回按钮文字、颜色
  10. 数据帧CRC32校验算法实现
  11. php常用面试题
  12. Django学习-8-模板渲染的一些特性
  13. 保留键的情况下取字典中最大的值(max\zip函数的联合使用)
  14. 多阶段构建Docker镜像
  15. 【原创】大数据基础之SPARK(9)SPARK中COLLECT和TAKE实现原理
  16. Java程序设计(第二版)复习 第三章
  17. QT 应用程序测试
  18. 小程 序swiper自适应宽高
  19. vscode 支持es6语法
  20. Python 服务器端表单验证插件

热门文章

  1. Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑
  2. QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样
  3. [Leetcode][Python]50: Pow(x, n)
  4. 【LeetCode练习题】Partition List
  5. VRay 2.0 SP1 2.10.01 for 3ds max 9/2008/2009/2010/2011/2012 32/64位 顶渲简体中文版+英文版[中国室内设计论坛-室内人]
  6. getgrent
  7. Jam&#39;s math problem(思维)
  8. EnyimMemcached扩展 遍历功能
  9. LinQ学习手册
  10. php预定义常量&amp;变量