poj 2728 Desert King(最优比例生成树)
2024-10-19 02:26:56
#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; }
}
最新文章
- 我的毕业设计——基于安卓和.NET的笔记本电脑远程控制系统
- VMware Workstation安装MAC OS X系统
- 20160621-BAPI 更改外向DN&;更改拣配
- java 输入输出 函数对象构造
- Java按位置解析文本文件(使用Swing选择文件)
- cakephp recursive -1,0,1,2 速查
- 使用堆栈结构进行字符串表达式(";7*2-5*3-3+6/3";)的计算
- MFC对话框屏蔽Enter和ESC键
- Ionic3学习笔记(四)修改返回按钮文字、颜色
- 数据帧CRC32校验算法实现
- php常用面试题
- Django学习-8-模板渲染的一些特性
- 保留键的情况下取字典中最大的值(max\zip函数的联合使用)
- 多阶段构建Docker镜像
- 【原创】大数据基础之SPARK(9)SPARK中COLLECT和TAKE实现原理
- Java程序设计(第二版)复习 第三章
- QT 应用程序测试
- 小程 序swiper自适应宽高
- vscode 支持es6语法
- Python 服务器端表单验证插件
热门文章
- Java Script 中 ==(Equal) 和 === (Identity Equal) 的区别和比较算法逻辑
- QT多重继承的时候,要把QObject放在最前面,否则报错——C++认为人性本恶,默认都是私有的,这点和Delphi的世界观不一样
- [Leetcode][Python]50: Pow(x, n)
- 【LeetCode练习题】Partition List
- VRay 2.0 SP1 2.10.01 for 3ds max 9/2008/2009/2010/2011/2012 32/64位 顶渲简体中文版+英文版[中国室内设计论坛-室内人]
- getgrent
- Jam&#39;s math problem(思维)
- EnyimMemcached扩展 遍历功能
- LinQ学习手册
- php预定义常量&;变量