POJ 最小球覆盖 模拟退火
最小球覆盖:用半径最小的球去覆盖所有点。
纯粹的退火算法,是搞不定的,精度不够,不然就会TLE,根本跑不出答案来。
任取一点为球心,然后一点点靠近最远点。其实这才是最主要的。
因为:4个点确定一个球,也就是说,这个球,会慢慢稳定,每次用一个点到最远的点的距离去靠近,怎么靠近,玄学距离 。
再在这个基础上乘以 t ,模拟退火温度。这样靠近速度增加。并且不用判断是否较以前是否更优才转移,因为他是必须转移过去。至少你不可能是最长边的端点的,而且他会随着温度逐渐稳定。
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
const int maxn = ;
struct Node {
double x,y,z;
}nodes[maxn];
int n;
double dist(Node a,Node b) {
return sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) + (a.z-b.z)*(a.z-b.z) );
}
double calc(Node z) {
double ret = ;
for(int i = ; i < n; i++)
ret = max(ret,dist(z,nodes[i]));
return ret;
}
int dx[] = {,,,,,-};
int dy[] = {,,-,,,};
int dz[] = {-,,,,,};
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n),n) {
for(int i = ; i < n; i++) scanf("%lf%lf%lf",&nodes[i].x,&nodes[i].y,&nodes[i].z);
Node s = nodes[];
double t = ;
double ans = 0x3f3f3f3f;
while(t>1e-) {
double d = ;
int k = ;
for(int i = ; i < n; i++) {
double dis = dist(s,nodes[i]);
if(d<dis) {
d = dis;
k = i;
}
}
Node z;
z.x = s.x + (nodes[k].x-s.x)/d*t;
z.y = s.y + (nodes[k].y-s.y)/d*t;
z.z = s.z + (nodes[k].z-s.z)/d*t;
ans = min(ans,d);
s = z;
t = t*0.98;
}
printf("%.5f\n",ans);
}
return ;
}
POJ 最小球覆盖 模拟退火的更多相关文章
- 最小球覆盖——模拟退火&&三分套三分套三分
题目 给出 $N(1 \leq N \leq 100)$ 个点的坐标 $x_i,y_i,z_i$($-100000 \leq x_i,y_i,z_i \leq 100000$),求包围全部点的最小的球 ...
- D.Country Meow 最小球覆盖 三分套三分套三分 && 模拟退火
// 2019.10.3 // 练习题:2018 ICPC 南京现场赛 D Country Meow 题目大意 给定空间内 N 个点,求某个点到 N 个点的距离最大值的最小值. 思路 非常裸的最小 ...
- Super Star(最小球覆盖)
Super Star http://poj.org/problem?id=2069 Time Limit: 1000MS Memory Limit: 65536K Total Submission ...
- POJ2069 最小球覆盖 几何法和退火法
对这种问题不熟悉的读者 可以先去看一看最小圆覆盖的问题 ZOJ1450 现在我们来看最小球覆盖问题POJ2069 题目很裸,给30个点 求能覆盖所有点的最小球的半径. 先给出以下几个事实: 1.对于一 ...
- POJ 2069 Super Star(计算几何の最小球包含+模拟退火)
Description During a voyage of the starship Hakodate-maru (see Problem 1406), researchers found stra ...
- poj 2069 Super Star 模拟退火
题目大意: 给定三位空间上的n(\(n \leq 30\))个点,求最小的球覆盖掉所有的点. 题解: 貌似我们可以用类似于二维平面中的随机增量法瞎搞一下 但是我不会怎么搞 所以我们模拟退火就好了啊QA ...
- poj 2069 Super Star —— 模拟退火
题目:http://poj.org/problem?id=2069 仍是随机地模拟退火,然而却WA了: 看看网上的题解,都是另一种做法——向距离最远的点靠近: 于是也改成那样,竟然真的A了...感觉这 ...
- Gym - 101981D The 2018 ICPC Asia Nanjing Regional Contest D.Country Meow 最小球覆盖
题面 题意:给你100个三维空间里的点,让你求一个点,使得他到所有点距离最大的值最小,也就是让你找一个最小的球覆盖掉这n个点 题解:红书模板题,这题也因为数据小,精度也不高,所以也可以用随机算法,模拟 ...
- poj 3020 最短路径覆盖 Antenna Placement
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7329 Accepted: 3635 ...
随机推荐
- MySql——Explain执行计划详解
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...
- 基于memcache的缓存机制的6个指令
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...
- rewrite 功能
一, rewrite 地址重写与地址转发 区别: 1,地址转发后客户端浏览器地址栏中的地址时不会改变的;而地址重写的话客户端浏览器地址栏会改变为服务器确定的地址 2, 在一次地址转发过程中,只产生一次 ...
- (转)python strip()函数 去空格\n\r\t函数的用法
原文:http://www.cnblogs.com/zdz8207/p/python_learn_note_20.html python3.4学习笔记(二十) python strip()函数 去空格 ...
- 06-struts2与ognl的结合
1 参数接收 2 配置文件中 1 Demo2Action package www.test.c_config; import com.opensymphony.xwork2.ActionSupport ...
- nginx打开php错误提示
首先要编辑php配置文件: vi /etc/php.ini error_reporting = E_ERROR display_errors = On 因为我开启了php-fpm.所以,还要编辑 p ...
- 如何让JS变量和字符串拼接后,是变量而不是字符串
今天有个非常有趣的事,因为我需要用JS去实现多语言,就是我在JS文件里定义了不同的变量,尝试用变量拼接字符串组成之前定义好的变量名称,结果拼接之后,显示的却是字符串,而不是变量,所以无法解析 zh_t ...
- django管理界面使用与bootstrap模板使用
一.bootstrap模板使用 1.去bootstrap官网找一个合适的模板,下载下来,右键另存为即可 bootstrap官网---->bootstrap中文文档3-------->起步- ...
- goto语句和标签
goto 语句用于将执行流更改到标签处,虽然t-sql和pl/sql都提供了该语句,但是作为编程而言,我们不推荐使用此编程技术.要编写一个标签,应当在标识符后面加一个冒号.列如,下面示例使用goto语 ...
- Java Mail邮件发送的简单实现
1.什么是java mail JAVA MAIL是利用现有的邮件账户发送邮件的工具,通过JAVA Mail的操控,让程序自动的使用设置的邮箱发送邮件. 这一机制被广泛的用在注册激活和垃圾邮件的发送等方 ...