1. /*
  2. 模拟退火法:
  3. 找到一些随机点,从这些点出发,随机的方向坐标向外搜索;
  4. 最后找到这些随机点的最大值;
  5. 坑://if(xx>-eps&&xx<x+eps&&yy>-eps&&yy<eps+y) {不知道为什么这个判断方式错误??????
  6. */
  7. #include<iostream>
  8. #include<cstdio>
  9. #include<math.h>
  10. #include<algorithm>
  11. #define pi acos(-1.0)
  12. #define N 1100
  13. #define inf 1000000000000
  14. #define eps 1e-8
  15. using namespace std;
  16. double x,y;
  17. int n;
  18. struct node {
  19. double u,v,dis;
  20. }f[N],endd,ff[N];
  21. double diss(double x,double y,int i) {
  22. return sqrt((x-f[i].u)*(x-f[i].u)+(y-f[i].v)*(y-f[i].v));
  23. }
  24. double Mindis(double x,double y) {
  25. double minn=1.0*inf,ss;
  26. int i;
  27. for(i=1;i<=n;i++) {
  28. ss=diss(x,y,i);
  29. if(minn>ss)
  30. minn=ss;
  31. }
  32. return minn;
  33. }
  34. void compute() {
  35. int i,j;
  36. double xx,yy;
  37. for(i=1;i<=20;i++) {//先随机出来一些点
  38. ff[i].u=(rand()%1000+1)/1000.0*x;
  39. ff[i].v=(rand()%1000+1)/1000.0*y;
  40. ff[i].dis=Mindis(ff[i].u,ff[i].v);
  41. }
  42. double T=sqrt(1.0*x*x+1.0*y*y);
  43. double rate=0.9;
  44. while(T>eps) {
  45. for(i=1;i<=20;i++)//对于这些点分别向外搜
  46. for(j=1;j<=30;j++) {//随机30个半径来搜索,更新,得到每个点可以到达的最远距离
  47. double ran=(rand()%1000+1)/1000.0*pi*10;
  48. xx=ff[i].u+cos(ran)*T;
  49. yy=ff[i].v+sin(ran)*T;
  50. //if(xx>-eps&&xx<x+eps&&yy>-eps&&yy<eps+y) {不知道为什么这个判断方式错误??????
  51. if(xx<0.0||xx>x||yy<0.0||yy>y)continue;
  52. double di=Mindis(xx,yy);
  53. if(ff[i].dis<di) {
  54. ff[i].dis=di;
  55. ff[i].u=xx;
  56. ff[i].v=yy;
  57. }
  58. }
  59. T*=rate;//退火率
  60. }
  61. for(i=1;i<=20;i++)//找到最大的一个
  62. if(endd.dis<ff[i].dis)
  63. endd=ff[i];
  64. return ;
  65. }
  66. int main() {
  67. // printf("%d\n",(rand()%1000+1)/1000.0*2*pi);
  68. int m,i,j,k,t;
  69. scanf("%d",&t);
  70. while(t--) {
  71. scanf("%lf%lf%d",&x,&y,&n);
  72. for(i=1;i<=n;i++)
  73. scanf("%lf%lf",&f[i].u,&f[i].v);
  74. endd.dis=-1;
  75. compute();
  76. printf("The safest point is (%.1f, %.1f).\n",endd.u,endd.v);
  77. }
  78. return 0;
  79. }

poj 1379 模拟退火法的更多相关文章

  1. POJ 1016 模拟字符串

    Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20396   Accepted: 68 ...

  2. unity, 模拟退后台

    //simulateSwitchToBackground.cs using UnityEngine;using System.Collections;using System.Collections. ...

  3. POJ 1208 模拟

    2017-08-28 15:07:16 writer:pprp 好开心,这道题本来在集训的时候做了很长很长时间,但是还是没有做出来,但是这次的话,只花了两个小时就做出来了 好开心,这次采用的是仔细分析 ...

  4. POJ - 3087 模拟 [kuangbin带你飞]专题一

    模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...

  5. POJ.1379.Run Away(模拟退火)

    题目链接 POJ输出不能用%lf! mmp从4:30改到6:00,把4:30交的一改输出也过了. 于是就有了两份代码.. //392K 500MS //用两点构成的矩形更新,就不需要管边界了 #inc ...

  6. POJ 1379 模拟退火

    模拟退火算法,很久之前就写过一篇文章了.双倍经验题(POJ 2420) 题意: 在一个矩形区域内,求一个点的距离到所有点的距离最短的那个,最大. 这个题意,很像二分定义,但是毫无思路,也不能暴力枚举, ...

  7. Shuffle'm Up POJ - 3087(模拟)

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15249   Accepted: 6962 Des ...

  8. POJ 1471 模拟?

    题意:求最大无坏点三角形 思路: 模拟? (为什么我模拟过了...) 有人用 DP,有人用 搜索... // by SiriusRen #include <cstdio> #include ...

  9. POJ 1951 模拟

    思路: 坑爹模拟毁我一生 给两组数据: 输入: YOURE TRAVELING THROUGH ANOTHER DIMENSION A DIMENSION NOT OF SIGHT. 输出: YR T ...

随机推荐

  1. [C陷阱和缺陷] 第2章 语法“陷阱”

    第2章 语法陷阱 2.1 理解函数声明   当计算机启动时,硬件将调用首地址为0位置的子例程,为了模拟开机时的情形,必须设计出一个C语言,以显示调用该子例程,经过一段时间的思考,得出语句如下: ( * ...

  2. C# 的占位符

    static void Main(string[] args) { Console.WriteLine("A:{0},a:{1}",65,97); Console.ReadLine ...

  3. 递推DP UVA 1424 Salesmen

    题目传送门 /* 题意:给定包含n个点的无向图和一个长度为L的序列,修改尽量少的点使得相邻的数字相同或连通 DP:状态转移方程:dp[i][j] = min (dp[i][j], dp[i-1][k] ...

  4. spring controller接口中,用pojo对象接收页面传递的参数,发现spring在对pojo对象赋值时,有一定顺序的问题

    1.我的项目中的实体类都继承了基类entityBase,里面封装了分页的一些属性,pageindex.pagesize.pagerownum等. 2.思路是页面可以灵活的传递分页参数,比如当前页pag ...

  5. 全面学习ORACLE Scheduler特性(1)创建jobs

    所谓出于job而胜于job,说的就是Oracle 10g后的新特性Scheduler啦.在10g环境中,ORACLE建议使用Scheduler替换普通的job,来管理任务的执行.其实,将Schedul ...

  6. data和string类型之间的相互转换

    package main; import java.text.SimpleDateFormat;import java.util.Date; import freemarker.core.ParseE ...

  7. js操作元素透明度以及浏览器兼容性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  8. pycharm永久激活(转载)

    转载自CSDN--http://blog.csdn.net/mr_hhh/article/details/79062747 2018-02-2417:30:52 今天再补充一个教程,关于pycharm ...

  9. Greenplum开发

    Greenplum(GP)采用了MPP架构,基于开源的数据库 PostgreSQL(PG). 1.首先什么是MPP架构? GreenPlum的架构采用了MPP(大规模并行处理).在 MPP 系统中,每 ...

  10. PHP实现写LOG日志的代码

    这篇文章给大家介绍的内容是关于PHP实现写LOG日志的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. public function write_log(){ //设置目录时间 ...