链接

求某一点到其它点距离和最小,求这个和,这个点 为费马点。

做法:模拟退火

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-8;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 struct point
18 {
19     double x,y;
20     point(double x=0,double y =0):x(x),y(y){}
21 }p[N];
22 int n;
23 int dir[4][2] = {0,1,0,-1,1,0,-1,0};
24 typedef point pointt;
25 pointt operator -(point a,point b)
26 {
27     return point(a.x-b.x,a.y-b.y);
28 }
29 double dis(point a)
30 {
31     return sqrt(a.x*a.x+a.y*a.y);
32 }
33 double cal(point pp)
34 {
35     int i;
36     double s = 0;
37     for(i = 1; i <= n; i++)
38     s+=dis(pp-p[i]);
39     return s;
40 }
41 int main()
42 {
43     int i;
44     while(scanf("%d",&n)!=EOF)
45     {
46         double t = 10000;
47         point pp = point(0,0);
48         for(i =1 ; i <= n;i ++)
49         {
50             scanf("%lf%lf",&p[i].x,&p[i].y);
51             pp.x+=p[i].x;
52             pp.y+=p[i].y;
53         }
54         pp.x /=n;
55         pp.y /=n;
56         double sum = cal(pp),tmp;
57         point tp,ans = pp;
58         while(t>0.02)
59         {
60             int flag = 1;
61             while(flag)
62             {
63                 flag = 0;
64                 for(i =0 ; i< 4 ; i++)
65                 {
66                     tp = point(pp.x+dir[i][0]*t,pp.y+dir[i][1]*t);
67                     tmp = cal(tp);
68                     if(tmp<sum)
69                     {
70                         sum = tmp;
71                         flag = 1;
72                         ans = tp;
73                     }
74                 }
75                 pp = ans;
76             }
77             t/=2;
78         }
79         printf("%.0f\n",sum);
80     }
81     return 0;
82 }

View Code

转载于:https://www.cnblogs.com/shangyu/p/3890279.html

poj2420A Star not a Tree?(模拟退火)相关推荐

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

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

  2. POJ2420——A Star not a Tree?

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

  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. [POJ2420 A Star not a Tree?]

    [关键字]:随机化搜索 模拟退火 [题目大意]:给出n个点,找出一个距离所有点之和最小的点,输出距离. //============================================== ...

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

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

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

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

  8. music算法_“要热爱 请深爱”系列(5)浅谈模拟退火算法

    黄乐天 浅谈模拟退火算法 背景 在实际生活中, 数学问题中,我们常常会遇到(一定范围内)函数求最值的问题.一般可以用数学方式解答,但如果遇到如下恶心的函数: 它的函数图像是这样的: 我们只好用计算机科 ...

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

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

最新文章

  1. 新冠病毒侵入人体全过程!从脚趾到大脑,科学家追踪到病毒对身体的巨大摧残...
  2. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性
  3. Android Studio 插件开发详解四:填坑
  4. composer 依赖包版本冲突_composer快速入门教程
  5. SQL Server和Oracle的差异
  6. php代理请求失败,http请求失败有哪些原因
  7. docker开机启动失败_Docker教程(二)——安装Docker
  8. 【数据结构笔记32】排序算法概述、简单排序(冒泡排序、插入排序)、逆序对
  9. 程序结构程序设计(四)
  10. 有效管理云计算成本的多个措施
  11. HDOJ 3507 Print Article(DP + 斜率优化)
  12. R语言报错:Error in scan
  13. ubuntu18.04下载显卡驱动+CUDA+CUDNN
  14. ps如何调出参考线?
  15. android探索之UID u0_axxx的由来
  16. 新猿木子李:0基础学python培训教程 Python操作Redis之hash类型
  17. Connext DDSQoS参考
  18. 医院绩效考核病案首页数据上报的难点及解决方案
  19. MySQL和php搭建聊天室,用PHP MySQL搭建聊天室
  20. 心心念特斯拉电动皮卡?现在可以下单了,只要1000块

热门文章

  1. 阿里云如何将服务器添加至跳板机,如何将服务器添加至jumpsever
  2. C++ 笔记(30)— 友元函数与友元类
  3. Git 错误提交后该如何回滚操作
  4. “勤奋”,是能让你走出低谷最有效的方法
  5. 交情来自一系列的交易
  6. LeetCode简单题之矩阵中的幸运数
  7. HarmonyOS系统概述
  8. NVIDIA TensorRT高性能深度学习推理
  9. 2021年大数据Flink(四十八):扩展阅读  Streaming File Sink
  10. python的redis数据库连接与使用