[关键字]:随机化搜索 模拟退火

[题目大意]:给出n个点,找出一个距离所有点之和最小的点,输出距离。

//===============================================================================

[分析]:同样是随机化的方法,只是在把没个点随机移动时有小小的变动。poj1379是使用得随机一个角度x然后利用t*cos(x)和t*sin(x)来处理随机走到的位置,而这道题因为没有了边界的限制,可以用以2t为长以要移动的点位中心的正方形中随机一个移动的位置来求最优值。至于具体退火算法步骤可以看poj1379或http://www.clarkok.com/blog/?p=357

//================================================================================

[代码]:

View Code

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;

const int NUM=20;const int TUM=20;const int RD=1000;const int MAXN=150;const double ZERO=0.1;const double det=0.7;

struct node{double x,y,dat;}a[MAXN],MIN,MAX,b[MAXN];int n;double ans;

double dis(node c){double sum=0;for (int i=1;i<=n;++i)           sum+=sqrt((a[i].x-c.x)*(a[i].x-c.x)+(a[i].y-c.y)*(a[i].y-c.y));return sum;}

double random(){double sum=(rand()%(RD+1))*(1.0/RD);return sum;}

node GET(node x,node y){     node c;//printf("%lf %lf %lf",x.x,y.x,y.x-x.x);//system("pause");     c.x=x.x+(y.x-x.x)*random(),c.y=x.y+(y.y-x.y)*random();//printf("%lf %lf\n",c.x,c.y);//system("pause");     c.dat=dis(c);return c;}

bool Init(){if (scanf("%d",&n)==EOF) return 0;    MIN.x=MIN.y=100000;    MAX.x=MAX.y=-100000;for (int i=1;i<=n;++i)    {        scanf("%lf%lf",&a[i].x,&a[i].y);if (a[i].x<MIN.x) MIN.x=a[i].x;if (a[i].y<MIN.y) MIN.y=a[i].y;if (a[i].x>MAX.x) MAX.x=a[i].x;if (a[i].y>MAX.y) MAX.y=a[i].y;    }for (int i=1;i<=NUM;++i) b[i]=GET(MIN,MAX);//,printf("%lf %lf %lf\n",b[i].x,b[i].y,b[i].dat);//printf("%lf %lf %lf %lf\n",MIN.x,MIN.y,MAX.x,MAX.y);    return 1;}

void Solve(double T){     node t,x,y;for (double i=T;i>=ZERO;i*=det)for (int j=1;j<=NUM;++j)for (int k=1;k<=TUM;++k)             {                 x.x=b[j].x-i,x.y=b[j].y-i;                 y.x=b[j].x+i,y.y=b[j].y+i;                 t=GET(x,y);//printf("%lf %lf %lf %lf %lf\n",x.x,x.y,y.x,y.y,i);                 if (t.dat<b[j].dat) b[j]=t;             }     ans=1e10;for (int i=1;i<=NUM;++i)     {if (ans>b[i].dat) ans=b[i].dat;//printf("%lf\n",b[i].dat);         }     printf("%.0lf\n",ans);}

int main(){    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);while (Init()) Solve(max(MAX.x-MIN.x,MAX.y-MIN.y));return 0;}

转载于:https://www.cnblogs.com/procedure2012/archive/2012/03/28/2420816.html

[POJ2420 A Star not a Tree?]相关推荐

  1. POJ2420——A Star not a Tree?

    题目链接:http://poj.org/problem?id=2420 A Star not a Tree? 题目大意:求费马点!!!模拟退火即可...... #include<iostream ...

  2. Poj2420 A Star not a Tree? 模拟退火算法

    题目链接:http://poj.org/problem?id=2420 题目大意:每组数据中给n个点(n<=100),求平面中一个点使得这个点到n个点的距离之和最小. 分析:一开始看到这个题想必 ...

  3. poj2420 A Star not a Tree? 【模拟退火】

    题意:平面上给你n个点,让你求一个点,到这n点的距离和最小 板子得模拟退火,系数也是很好控制,对数器和ACdream得代码跑了1884组样例,结果只有一组不一样,可是我得解更优啊, 交上去RE, 不想 ...

  4. [POJ2420]A Star not a Tree?(模拟退火)

    题目链接:http://poj.org/problem?id=2420 求费马点,即到所有其他点总和距离最小的点. 一开始想枚举一个坐标,另一个坐标二分的,但是check的时候还是O(n)的,复杂度相 ...

  5. POJ 2420 A Star not a Tree?【爬山法】

    题目大意:在二维平面上找出一个点,使它到所有给定点的距离和最小,距离定义为欧氏距离,求这个最小的距离和是多少(结果需要四舍五入)? 思路:如果不能加点,问所有点距离和的最小值那就是经典的MST,如果只 ...

  6. poj2420A Star not a Tree?(模拟退火)

    链接 求某一点到其它点距离和最小,求这个和,这个点 为费马点. 做法:模拟退火 1 #include <iostream> 2 #include<cstdio> 3 #incl ...

  7. 模拟退火(Simulated Annealing)算法 PO J1379 2420

    在很多信息学竞赛选手看来,很多时候几何题目就是代码量大的代名词,即使对于一些经典问题,庞大的代码量也使很多人望而却步.模拟退火算法思维及编写简单.灵活,可以在一类最远.最近或第k近距离问题中发挥威力. ...

  8. javascript终于支持本机私有字段和方法

    JavaScript is known to be quite confusing for beginners as it contains some tricky concepts which re ...

  9. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

最新文章

  1. Nature综述:微生物的衰老与寿命
  2. 人的一生奋斗史Rational Rose 版
  3. android Button源码分析
  4. Java黑皮书课后题第7章:7.26(完全相同的数组)如果两个数组list1和list2的对应元素都相等,认为完全相同。编写一个测试程序,提示用户输入两个整数列表,然后显示这两个列表是否完全相同
  5. textarea 换行_textarea自动换行方法总结
  6. Exception Error log
  7. java B2B2C springmvc mybatis电子商务平台源码-消息队列之RocketMQ
  8. 计算机c语言期末答案,大学计算机C语言期末考试试题A.doc
  9. 2018-2019-2 网络对抗技术 20165230 Exp8 Web基础
  10. 20151024-1025-威海-第5届全国高校软件工程专业教育年会参会总结
  11. 防止系统页面被加载进 iframe 子窗口
  12. ctfshow萌新赛经验总结
  13. MFC用户界面设计 一
  14. python实践项目 航空公司客户价值分析
  15. 为什么现在一些年轻人放弃缴纳社保?
  16. 微信朋友圈能评论表情包了,来斗图啊!
  17. webpack手摸手学习系列之配置详解的 entry、output、module、resolve、devServer 和 optimization
  18. python --003--流程控制while,for
  19. 跟我一起玩Win32开发(2):完整的开发流程
  20. Asterisk Configuration for ARI

热门文章

  1. 什么样的人去贷款最受银行欢迎?
  2. 国家标准GB7665-87传感器
  3. 通过ISO镜像文件安装Ubuntu(可实现默认启动Windows的双系统)
  4. 徐涛八套卷pdf_徐涛八套卷pdf,11月9日资料更新!
  5. R pdf大小_「福昕PDF助手」12个常用的Word快捷键,一看就会,你值得拥有!
  6. 清除浏览器缓存之后为什么还是显示旧的html页面_Web缓存控制策略详解
  7. 所属的用户_关于chmod(变更用户对此文件的相关权限)超详细说明,小白秒懂
  8. Qt在linux下无法输入中文,Ubuntu使用集成开发环境QT无法输入中文的解决方法
  9. jython mysql_Jython
  10. Deep learning Reading List