/*
模拟退火法:找到一些随机点,从这些点出发,随机的方向坐标向外搜索;最后找到这些随机点的最大值;坑://if(xx>-eps&&xx<x+eps&&yy>-eps&&yy<eps+y) {不知道为什么这个判断方式错误??????
*/
#include<iostream>
#include<cstdio>
#include<math.h>
#include<algorithm>
#define pi acos(-1.0)
#define N  1100
#define inf  1000000000000
#define eps  1e-8
using namespace std;
double  x,y;
int n;
struct node {
double  u,v,dis;
}f[N],endd,ff[N];
double diss(double x,double y,int i) {return sqrt((x-f[i].u)*(x-f[i].u)+(y-f[i].v)*(y-f[i].v));
}
double Mindis(double x,double y) {double  minn=1.0*inf,ss;int i;for(i=1;i<=n;i++) {ss=diss(x,y,i);if(minn>ss)minn=ss;}return minn;
}
void compute() {int i,j;double xx,yy;for(i=1;i<=20;i++) {//先随机出来一些点ff[i].u=(rand()%1000+1)/1000.0*x;ff[i].v=(rand()%1000+1)/1000.0*y;ff[i].dis=Mindis(ff[i].u,ff[i].v);}double T=sqrt(1.0*x*x+1.0*y*y);double rate=0.9;while(T>eps) {for(i=1;i<=20;i++)//对于这些点分别向外搜for(j=1;j<=30;j++) {//随机30个半径来搜索,更新,得到每个点可以到达的最远距离double ran=(rand()%1000+1)/1000.0*pi*10;xx=ff[i].u+cos(ran)*T;yy=ff[i].v+sin(ran)*T;//if(xx>-eps&&xx<x+eps&&yy>-eps&&yy<eps+y) {不知道为什么这个判断方式错误??????if(xx<0.0||xx>x||yy<0.0||yy>y)continue;double di=Mindis(xx,yy);if(ff[i].dis<di) {ff[i].dis=di;ff[i].u=xx;ff[i].v=yy;}}T*=rate;//退火率}for(i=1;i<=20;i++)//找到最大的一个if(endd.dis<ff[i].dis)endd=ff[i];return ;
}
int main() {//  printf("%d\n",(rand()%1000+1)/1000.0*2*pi);int m,i,j,k,t;scanf("%d",&t);while(t--) {scanf("%lf%lf%d",&x,&y,&n);for(i=1;i<=n;i++)scanf("%lf%lf",&f[i].u,&f[i].v);endd.dis=-1;compute();printf("The safest point is (%.1f, %.1f).\n",endd.u,endd.v);}
return 0;
}

转载于:https://www.cnblogs.com/thefirstfeeling/p/4410615.html

poj 1379 模拟退火法相关推荐

  1. 随机优化算法---爬山法VS模拟退火法

    随机优化算法–爬山法VS模拟退火算法 随机优化算法,由于开始和过程都是随机的数值,所以每次产生的结果都不一样.但大致收敛方向是一致的. 爬山法是一种局部最优的算法(本质上属于贪心法),也属于启发式的方 ...

  2. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  3. 【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法

    以下均假设最优解是在最低点. 爬山法 爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策. 直白地讲,就是当目前无法直接到达最优解,但是可以判断两 ...

  4. Flooded! POJ - 1877 模拟题

    Flooded! POJ - 1877模拟题 这篇文章题解写的很好 附上自己的代码 #include<iostream> #include<algorithm> using n ...

  5. javascript 模拟退格键_js实现模拟计算器退格键删除文字效果的方法

    本文实例讲述了js实现模拟计算器退格键删除文字效果的方法.分享给大家供大家参考.具体如下: /p> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tr ...

  6. poj 3032 模拟

    题意:给你n张牌,让你变一个魔术:第1次把上面的1张牌放到底部,然后最上面的牌就是1,然后拿走1.第2次把上面的2张牌依次放到底部,然后最上面的牌就是2,然后拿走2....重复这个过程,直到所有的牌都 ...

  7. javascript 模拟退格键_javascript禁止Backspace退格键的多种方法

    方法1,采用键盘监听,处理键盘事件,处理方法是将type="text" "password"及"textarea"的输入框以外的元素做了退格 ...

  8. poj 1013 模拟 天平问题

    //============================================================================ // // > File : poj ...

  9. POJ 2190 模拟

    按照题意模拟就好- 注意"X"只能出现在最后一位... // by SiriusRen #include <cstdio> using namespace std; c ...

最新文章

  1. GraphDTA | 基于图卷积网络预测药物-靶标结合亲和力
  2. Oracle 系统表大全
  3. Jemeter组件介绍(四)
  4. js word 预览_微软补丁日:Word/DHCP/LNK远程代码执行漏洞预警
  5. 原型(Prototype)的场景是不支持循环依赖的
  6. 二维小波变换_【外文文献速读】实时二维水波模拟
  7. cf550D. Regular Bridge(构造)
  8. mybatis级联查询list_MyBatis手把手跟我做系列(四) ---级联查询与懒加载
  9. python socket 连续send,出现粘包问题
  10. 日常投票评分:大多都是拉票
  11. 集成电路设计——闩锁效应
  12. 微信小程序上传图片解决方案+oss+后端代码
  13. 手机如何在线图片识别?3大教程,一键轻松图片转文字
  14. 西安电子科技大学计算机学院评论,放弃985,选择西安电子科技大学计算机专业,网友表示没毛病...
  15. 利用Excel去除重复项
  16. CF 1368G Shifting Dominoes
  17. 对java导出PDF进行图片,(图片/文字)水印,页眉页脚的添加
  18. 解决笔记本一插电源就死机蓝屏,drive_power_state_failure报错的问题
  19. jquery-js 美化页面
  20. 温故而知新--Java基础(三):Java常用集合类(上)

热门文章

  1. c# 大数据量比较时-方案
  2. Delphi 2010 refactor / refactoring 重构不能使用的原因以及解决
  3. Re: Programming C/C++中extern C含义深层探索
  4. 使用ORACLE生成文本文件
  5. NHibernate之旅(10):探索父子(一对多)关联查询
  6. 在CSS3中,可以利用transform功能来实现文字或图像的旋转、缩放、倾斜、移动这四种类型的变形处理...
  7. BIRCH聚类算法原理
  8. jQuery中deferred对象的使用(二)
  9. C#笔记2__Char类、String类、StringBuilder类 / 正则表达式 /
  10. mqtt连接失败_Netty实战:如何让单机下Netty支持百万长连接?