poj1379 模拟退火
题意:和上题一样。。。就是把最小值换成了最大值。。
ref:http://www.cppblog.com/RyanWang/archive/2010/01/21/106112.html
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<ctime>
- using namespace std;
- #define eps 1e-3
- #define pi acos(-1.0)
- #define POI 15 //独立跑POI次,找最值 tp[1..POI]是随机的初值
- #define RUN 40 //迭代次数,本题中即点(tx,ty)向RUN个方向发散
- #define INF 99999.999
- int X,Y,N,T;
- double ans;
- int ansi;
- struct
- {
- double x,y;
- }tp[],hol[];
- double sol[];
- double dist(double x1,double y1,double x2,double y2)
- {
- return(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
- }
- double dis(double x,double y)
- {
- double tmp=INF;
- for(int i=;i<=N;i++)
- {
- double tx=hol[i].x,ty=hol[i].y;
- tmp=min(tmp,dist(tx,ty,x,y));
- }
- return tmp;
- }
- void sa()
- {
- for(int i=;i<=POI;i++)
- {
- tp[i].x=(rand()%+)/1000.0*X;
- tp[i].y=(rand()%+)/1000.0*Y;
- sol[i]=dis(tp[i].x,tp[i].y);
- //printf("%.1f~%.1f=%.1f\n",tp[i].x,tp[i].y,sol[i]);
- }
- double step=1.0*max(X,Y)/sqrt(1.0*N);
- while(step>eps)
- {
- for(int i=;i<=POI;i++)
- {
- double kx=tp[i].x,ky=tp[i].y;
- double tx=kx,ty=ky;
- for(int j=;j<RUN;j++)
- {
- double angle=(rand()%+)/1000.0**pi;
- kx=tx+cos(angle)*step;
- ky=ty+sin(angle)*step;
- if((kx>X)||(ky>Y)||(kx<)||(ky<)) continue;
- double tmp=dis(kx,ky);
- if(tmp>sol[i])
- {
- tp[i].x=kx; tp[i].y=ky;
- sol[i]=tmp;
- }
- }
- }
- step*=0.80;
- }
- }
- int main()
- {
- srand(time(NULL));
- cin>>T;
- //cout<<T<<endl;
- while(T--)
- {
- cin>>X>>Y>>N;
- for(int i=;i<=N;i++)
- cin>>hol[i].x>>hol[i].y;
- sa();
- ans=0.000;
- for(int i=;i<=POI;i++)
- {
- //printf("AA: %.1f~%.1f=%.1f\n",tp[i].x,tp[i].y,sol[i]);
- if(sol[i]>ans)
- {
- ans=sol[i];
- ansi=i;
- }
- }
- printf("The safest point is (%.1f, %.1f).\n",tp[ansi].x,tp[ansi].y);
- //printf("%.1lf\n",ans);
- }
- return ;
- }
poj1379 模拟退火的更多相关文章
- 【模拟退火】poj1379 Run Away
题意:平面上找一个点,使得其到给定的n个点的距离的最小值最大. 模拟退火看这篇:http://www.cnblogs.com/autsky-jadek/p/7524208.html 这题稍有不同之处仅 ...
- poj-1379 Run Away(模拟退火算法)
题目链接: Run Away Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7982 Accepted: 2391 De ...
- 模拟退火算法(run away poj1379)
http://poj.org/problem?id=1379 Run Away Time Limit: 3000MS Memory Limit: 65536K Total Submissions: ...
- poj1379
poj1379 题意 给出 n 个洞的坐标,要求找到一点使得这一点距离最近洞的距离最远. 分析 通过这道题学习一下模拟退火算法, 这种随机化的算法,在求解距离且精度要求较小时很有用. 简而言之,由随机 ...
- poj-2420 A Star not a Tree?(模拟退火算法)
题目链接: A Star not a Tree? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5219 Accepte ...
- bzoj3680模拟退火
看题意就是一道数学物理题,带权费马点 --这怎么是数学了,这也是物理的 所以要用物理方法,比如FFF 国际著名oi选手miaom曾说 模拟退火初温可以低,但是最好烧个几千次 国际著名物理课代表+1 ...
- 无题的题 & 模拟退火...
题意: 给你不超过8条一端在圆心的半径,求他们组成的凸包的最大面积. SOL: 正解怎么搞啊不会啊...然后昨天毛爷爷刚讲过模拟退火...那么就打一个吧... 然后就T了,不过三角形的部分分妥妥的.. ...
- [POJ2069]Super Star(模拟退火)
题目链接:http://poj.org/problem?id=2069 题意:求一个半径最小的球,使得它可以包围住所有点. 模拟退火,圆心每次都去找最远那个点,这样两点之间的距离就是半径,那么接下来移 ...
- [POJ2420]A Star not a Tree?(模拟退火)
题目链接:http://poj.org/problem?id=2420 求费马点,即到所有其他点总和距离最小的点. 一开始想枚举一个坐标,另一个坐标二分的,但是check的时候还是O(n)的,复杂度相 ...
随机推荐
- QT 数据库编程三
//mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...
- java:hibernate + oracle之坑爹的clob
oracle + hibernate 环境,如果表中有 clob字段,hibernate的Entity类,如果Column注解打在私有成员上,则clob私有成员,首字母一定要按字母顺序排在最后,安全的 ...
- "Timeout"在测试框架里是如何被实现的
今天组里的小伙伴问了我一个问题:“我这里有一个底层驱动的接口,我想在测试它的时候加上超时限制,时间一过就fail掉它,执行后面的测试用例.怎么办到呢?”.我问:“它自己没有超时响应的机制么? 超时抛e ...
- des解密不完整,前面几位是乱码的解决办法
在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码.废了半天劲,终于找到了问题所在. 下面先介绍一下des,了解des的同学可以直接看下面的解决办法. ...
- Validform表单验证总结
近期项目里用到了表单的验证,选择了Validform_v5.3.2. 先来了解一下一些基本的参数: 通用表单验证方法:Demo: $(".demoform").Validform( ...
- sql 几点记录
1 With子句 1.1 学习目标 掌握with子句用法,并且了解with子句能够提高查询效率的原因. 1.2 With子句要点 with子句的返回结果存到用户的临时表 ...
- 同态加密-Homomorphic encryption
同态加密(Homomorphic encryption)是一种加密形式,它允许人们对密文进行特定的代数运算得到仍然是加密的结果,将其解密所得到的结果与对明文进行同样的运算结果一样.换言之,这项技术令人 ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
- 网页倒计时,动态显示"××年还剩××天××时××分××秒"
var target = document.getElementById('target'); function getTimeString(){ // 要计算任意两个日期的时间差只要修改curren ...
- 一键系统优化15项脚本,适用于Centos6.x
#!/bin/sh ################################################ #Author:nulige # qqinfo:1034611705 # Date ...