启蒙博客:https://blog.csdn.net/AI_BigData_wh/article/details/77943787?locationNum=2&fps=1

POJ2069:最小球覆盖


被精度搞死。。POJ做题经常被精度卡到怀疑人生。。好感-1-1-1...-1

队友的模拟退火的模版好像是错的(但是能过HDU3007,很玄学了)。初识温度的设置不能太大,会影响最终结果的准确度。

ac代码:

#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 40;
const double eps = 1e-7;
const double DINF = 0x7fffffff;
const double initT = 400;//设小了可能会wa,POJ2069开到500会wa,200-400可行
struct Point{double x, y, z;Point(double x = 0, double y = 0, double z = 0):x(x),y(y),z(z){}
};
Point p[maxn];
int n;
double dist(Point a, Point 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 sa()
{double ans = DINF, T = initT;//T相当与迭代次数,多次结果更准确Point ansp = Point(0,0,0);// ansp记录最小球的圆心while(T > eps){double maxd = -1;int k = 0;for(int i = 0; i < n; i++)if(dist(ansp, p[i]) > maxd){maxd = dist(ansp, p[i]);k = i;//不单独开一个点maxd记录和当前圆心距离最远的点,会wa,精度问题吧}ans = min(ans, maxd);//更新最小半径ansp.x += (p[k].x-ansp.x)*T/maxd;ansp.y += (p[k].y-ansp.y)*T/maxd;ansp.z += (p[k].z-ansp.z)*T/maxd;T *= 0.98;//降温}return ans;
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(scanf("%d", &n)){if(n == 0) break;for(int i = 0; i < n; i++) scanf("%lf %lf %lf", &p[i].x, &p[i].y, &p[i].z);printf("%.5lf\n", sa());}return 0;
}

HDU3007: 最小圆覆盖


数据比较水吧。用队友的模版也能过,两个都贴上吧。!(◎_◎;)

mine:

#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 550;
const double eps = 1e-7;
const double DINF = 0x7fffffff;
const double initT = 400;//设小了可能会wa,POJ2069开到500会wa
struct Point{double x, y;Point(double x = 0, double y = 0):x(x),y(y){}
};
Point p[maxn];
int n;
double dist(Point a, Point b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double sa()
{double ans = DINF, T = initT;//T相当与迭代次数,多次结果更准确Point ansp = Point(0,0);//ansp记录最小球的圆心while(T > eps){double maxd = -1;int k = 0;for(int i = 0; i < n; i++)if(dist(ansp, p[i]) > maxd){maxd = dist(ansp, p[i]);k = i;}ans = min(ans, maxd);//更新最小半径ansp.x += (p[k].x-ansp.x)*T/maxd;ansp.y += (p[k].y-ansp.y)*T/maxd;T *= 0.98;//降温}printf("%.2lf %.2lf %.2lf\n", ansp.x, ansp.y, ans);
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(scanf("%d", &n)){if(n == 0) break;for(int i = 0; i < n; i++) scanf("%lf %lf", &p[i].x, &p[i].y);sa();}return 0;
}

WJX‘s:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=550;
const double eps=1e-3;       //精度
const double start_T=1000;   //初始温度
const double rate=0.98;      //温度下降速率
struct point
{double x;double y;
} p[maxn];
int N;
double dist(point a,point b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double solve()
{double T=start_T;point ans_p={0,0};  //初始点double ans=1e99;      //预设一个较大值while(T>eps){point maxd_p=p[1];for(int i=2;i<=N;i++){if(dist(ans_p,p[i])>dist(ans_p,maxd_p))maxd_p=p[i];}//找到距离ans_p最远的点,maxd_pans=min(ans,dist(ans_p,maxd_p));ans_p.x+=(maxd_p.x-ans_p.x)*(T/start_T);    //以一定概率靠近maxd_pans_p.y+=(maxd_p.y-ans_p.y)*(T/start_T);T*=rate;}printf("%.2lf %.2lf %.2lf\n", ans_p.x, ans_p.y, ans);
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while(scanf("%d",&N) && N){for (int i = 1; i <= N; i++)scanf("%lf %lf", &p[i].x, &p[i].y);solve();}return 0;
}

【POJ2069HDU3007】模拟退火算法之最小球/圆覆盖相关推荐

  1. 最少圆覆盖通信覆盖问题-算法分析设计-贪心算法-java实现

    问题描述 假设海岸线是一条无限延伸的直线,陆地在海岸线的一侧,海洋在另外一侧.每个小岛相当于海洋侧的一个点.坐落在海岸线上的基站只能覆盖半径为d的范围.应用直角坐标系,将海岸线作为x轴,设海洋侧在x轴 ...

  2. 模拟退火算法及常见应用

    模拟退火 模拟退火( S i m u l a t e d A n n e a l i n g [ S A ] Simulated ~~Annealing[SA] Simulated  Annealin ...

  3. 算法学习:最小圆覆盖

    [参考博客] https://www.cnblogs.com/bztMinamoto/p/10698920.html [定义] [圆]一个圆心和他的半径,就能够确定这个半径 [解决问题] 字面意思 给 ...

  4. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题

    简述 算法设计课这周的作业: 赶紧写了先,不然搞不完了. 文章目录 简述 算法理论部分 变量简单分析 从状态转移概率到状态概率 推导 理解当温度收敛到接近0的时候,收敛到结果 理论部分的后记 pyth ...

  5. 数学建模国赛 常考赛题类型(模拟退火算法、粒子群算法、遗传算法)

    不知小伙伴们有没有发现,在1992~2020年历年国赛赛题中,优化类赛题所占的比例非常大,如在近五年的题目中: 2016A:系泊系统的设计: 2017B:"拍照赚钱"的任务定价 2 ...

  6. 万字长文了解模拟退火算法原理及求解复杂约束问题(源码实现)

    模拟退火算法原理 退火这个词,其实是铁匠发明的.它的意思很简单,就是将铁匠炉烧热后,再把下边的火撤掉,让金属在炉子里边慢慢冷却.人们发现,这个缓慢的降温过程能消除金属内部的各种缺陷,使得其恢复能量最低 ...

  7. Python数模笔记-模拟退火算法(4)旅行商问题

    1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权 ...

  8. 模拟退火算法从原理到实战【基础篇】

    模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小 ...

  9. consplan r语言_模拟退火算法实现:求解中国31个城市TSP问题

    最近在学习玻尔兹曼机,里面用到了模拟退火算法,经过一天的实验,总算顺利完成,本文打算记录这一过程,以作备忘. 本文内容如下: 1.实验环境 2.算法原理简介 3.TSP案例代码实现 4.运行结果解析 ...

  10. k图着色 局部搜索算法与模拟退火算法的python实现

    文章目录 前言 如何评价一个解? 通过计算出的冲突来找它的邻居解 数据的格式 局部搜索 概述 补充 代码 模拟退火 概述 补充 代码 总结以及不足之处 前言 这两种算法就不详细介绍了,流程思路比较简单 ...

最新文章

  1. Asp.net团队疯了(同时发布WebMatrix, Razor, MVC3和Orchard)
  2. 浅入浅出JS中的eval及json
  3. linux 之 rpm 网站
  4. 快慢指针____函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移
  5. Dora.Interception: 一个为.NET Core度身定制的AOP框架
  6. Tree前序反序列化
  7. 【渝粤教育】国家开放大学2019年春季 2114人体解剖生理学 参考试题
  8. 作为面试官的一些经历,希望能给找工作的朋友一些参考
  9. Try increasing heap size with java option '-Xmxlt;sizegt;’.
  10. Introducing to Spring Framework
  11. EVE-NG之dynamips镜像重新计算idle值
  12. 文件系统系列之一:fat文件系统的结构分析
  13. 正好股票资讯大盘平衡被打破
  14. python sort函数原理_python sort函数原理
  15. 第五章 站在巨人的肩膀上
  16. 给网站添加悬浮音乐播放器
  17. Reog Ponorogo是爪哇族人在印尼的一个部落的传统舞蹈
  18. 【MySQL数据库笔记 - 进阶篇】(四)视图/存储过程/触发器
  19. Angular + xlsx + xlsx-js-style实现多个sheel页Excel下载
  20. 四、资讯安全网词汇表

热门文章

  1. 蓝桥杯 算法训练 斐波那契串
  2. magento 客户表相关_第9章 相关性分析
  3. 文字识别成语音_广东人专属!微信语音转文字可以识别粤语了!
  4. JS 使用正则表达式参考,分组捕获,遍历输出所有匹配结果
  5. mybatis中的三种多表查询的方式详解,业务装配,N+1,多表查询的sql
  6. c# html正则,c# 使用正则解析html
  7. python中换行的转义字符_Python语言中表示换行的转义字符是____________。(2.5分)_学小易找答案...
  8. matlab浪漫画图,Matlab技巧11:谁说数学人不懂浪漫——Matlab画隐函数曲面
  9. hello程序代码python_翻译:《实用的Python编程》01_02_Hello_world
  10. 项目中css初始化通用代码(源码,直接套)