题目链接:http://poj.org/problem?id=2420

题目大意:每组数据中给n个点(n<=100),求平面中一个点使得这个点到n个点的距离之和最小。

分析:一开始看到这个题想必是不好做的...因为平面太大了,不能使用枚举的方法,于是想到随机点出来比较。可是总不能无限的枚举,而且随机点出的答案需要是最优值还是一个玄学问题。所以想到了模拟退火的方法。

具体操作:首先随意找一个点作为出发点,然后设置一个初始温度,使得这个点可以在这个温度下乱跑[但是只让它往上下左右跑]温度越高,这个点就越活跃,在所找到的区域中选一个到其他点距离和最小的点,然后跳过去。完成这一步后,温度降低,再在新的点附近搜。联想到刚开始学模拟退火时看到的一张图:

再配上一句经典的话:

爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。

可以把我们的题目想像到这个图中去:

  山峰类似距离和的函数,求最小值相当于找最高峰,一开始允许随便找,就可以跨过第一座看上去是最高的峰顶而去往其他的位置。当时当温度降下来[或是酒慢慢醒了]就只能在比较近的位置找了,直到某个位置跳上了最高峰,得到最后的答案。

但是毕竟这个起始温度和降低温度的速度还是有些玄学的。所以不妨开得大一点保险好了...

AC代码

 #include<cstdio>
#include<cmath> using namespace std; const int maxn=;
const int T=;
const int INF=0x7fffffff;
const double eps=1e-;
const double delta=0.98; struct Node{double x,y;}node[maxn]; int n;
int dx[]={,,,-};
int dy[]={,-,,}; inline double dis(Node A,Node B){
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
} double sum_dis(Node A){
double sum=;
for(int i=;i<=n;i++)
sum+=dis(A,node[i]);
return sum;
} void search(){
Node Ans=node[],Now;
double t=T,res=INF;
bool find;
while(t>eps){
find=true;
while(find){
find=false;
for(int j=;j<;j++){
Now.x=Ans.x+dx[j]*t;
Now.y=Ans.y+dy[j]*t;
double Dis=sum_dis(Now);
if(Dis<res)
res=Dis,Ans=Now,find=true;
}
}
t=t*delta;
}
if(res-(int)(res)>0.5)
printf("%d\n", (int)(res+));
else
printf("%d\n", (int)(res));
} int main(){
#ifndef ONLINE_JUDGE
freopen("Poj2420.in","r",stdin);
freopen("Poj2420.out","w",stdout);
#endif while(~scanf("%d",&n)){
for(int i=;i<=n;i++)
scanf("%lf%lf",&node[i].x,&node[i].y);
search();
} return ;
}

Poj2420 A Star not a Tree? 模拟退火算法的更多相关文章

  1. poj-2420 A Star not a Tree?(模拟退火算法)

    题目链接: A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5219   Accepte ...

  2. poj2420 A Star not a Tree? 模拟退火

    题目大意: 给定n个点,求一个点,使其到这n个点的距离最小.(\(n \leq 100\)) 题解 模拟退火上 #include <cmath> #include <cstdio&g ...

  3. poj2420 A Star not a Tree? 找费马点 模拟退火

    题目传送门 题目大意: 给出100个二维平面上的点,让你找到一个新的点,使这个点到其他所有点的距离总和最小. 思路: 模拟退火模板题,我也不懂为什么,而且一个很有意思的点,就是初始点如果是按照我的代码 ...

  4. uva 10228 - Star not a Tree?(模拟退火)

    题目链接:uva 10228 - Star not a Tree? 题目大意:给定若干个点,求费马点(距离全部点的距离和最小的点) 解题思路:模拟退火算法,每次向周围尝试性的移动步长,假设发现更长处, ...

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

    B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...

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

    题意:求平面上一个点,使其到给定的n个点的距离和最小,即费马点. 模拟退火的思想是随机移动,然后100%接受更优解,以一定概率接受更劣解.移动的过程中温度缓慢降低,接受更劣解的概率降低. 在网上看到的 ...

  7. POJ-2420 A Star not a Tree? 梯度下降 | 模拟退火

    题目链接:https://cn.vjudge.net/problem/POJ-2420 题意 给出n个点,找一个点,使得这个点到其余所有点距离之和最小. 思路 一开始就在抖机灵考虑梯度下降,猜测是个凸 ...

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

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

  9. POJ 2420 A Star not a Tree?(模拟退火)

    题目链接 居然1Y了,以前写的模拟退火很靠谱啊. #include <cstdio> #include <cstring> #include <string> #i ...

随机推荐

  1. maraidb半同步复制

    半同步复制是在主从同步复制的基础之上,主从同步前面我的博文有介绍 Semisynchronous Replication(半同步复制)则一定程度上保证提交的事务已经传给了至少一个备库 MySQL在加载 ...

  2. tomcat学习笔记2

    LNMT在网站架构中的实现过程: Client --> http --> Nginx --> reverse_proxy (http) --> tomcat (http con ...

  3. Cassandra 数据模型 (基于CQL,解决胖列数量限制及灵活性问题)(1.1及以上版本)

    文中主要交代Cassandra的编程模型及数据结构. 由于Cassandra版本数次更新,网上中文的资料已经有点过时,比较有代表性的比如ebuy那篇文章都已经过时了,于是自己找资料,结合官方博客写一篇 ...

  4. PHPExcel导出导入excel、csv等格式数据

    <?php if(!defined('BASEPATH')) exit('No direct script access allowed'); //物资发料单明细 class Read_writ ...

  5. Material Design:CollapsingToolbarLayout

    activity_main.xml: <android.support.design.widget.CoordinatorLayout xmlns:android="http://sc ...

  6. [terry笔记]Oracle数据泵-schema导入导出

    数据泵是10g推出的功能,个人倒数据比较喜欢用数据泵. 其导入的时候利用remap参数很方便转换表空间以及schema,并且可以忽略服务端与客户端字符集问题(exp/imp需要排查字符集). 数据泵也 ...

  7. SQL基础篇---基本概念解析

    1.数据库database:保存表和其他相关SQL结构容器(一般是一个文件或者一组文件) 2.SQL (Structared Query Language):是一种专门用来与数据库沟通的语言,是一种结 ...

  8. 常用的PC/SC接口函数

    PC/SC规范是一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal Computer)到智能卡(SmartCard)的整合环境,PC/SC规范建立在工业标准 ...

  9. struct的成员对齐问题-结构体实际大小问题

    struct的成员对齐 注意:为了方便说明,等号左边是每个数据单独所占长度,右边是最终空间大小,以字节为单位. 一.什么时间存在对其问题:(32位机对齐方式是按照4字节对其的,以下所有试验都是在32位 ...

  10. db2建立表空间

    --缓冲池 CREATE BUFFERPOOL EMP_BUF_POOL  IMMEDIATE  ALL DBPARTITIONNUMS  SIZE 250  NUMBLOCKPAGES 0  PAG ...