题意:求到n个点的最大距离最小化的点

///爬山算法
//是个单峰函数,还有那个bzoj3680
#include<bits/stdc++.h>
#define mp              make_pair
#define sz(x)           int((x).size())
#define fin             freopen("in.txt","r",stdin)
#define fout            freopen("out.txt","w",stdout)
#define io              ios::sync_with_stdio(0),cin.tie(0)
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 1e4 + 5;
int n;
double X,Y;
//
struct point
{double x,y;
} p[maxn],pp;
double ans=1e10;
double dis(point a,point b)
{return ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int get(point x)
{double res=-1;int k;for(int i=1; i<=n; ++i){double m=dis(p[i],x);if(m>res)res=m,k=i;}ans=min(ans,dis(x,p[k]));return k;
}
void hc()
{double  T=1.0,eps=1e-8;while(T>eps){//if(pp.x<=X&&pp.y<=Y&&pp.x>=0&&pp.y>=0)// {int k=get(pp);pp.x=pp.x+(p[k].x-pp.x)*T;pp.y=pp.y+(p[k].y-pp.y)*T;// }T*=0.999;}
}
int  main()
{double X,Y;while(cin>>X>>Y>>n){for(int i=1; i<=n; ++i)cin>>p[i].x>>p[i].y;pp.x=X/2.0,pp.y=Y/2.0;ans=1e10;hc();printf("(%.1f,%.1f).\n",pp.x,pp.y);printf("%.1f\n",sqrt(ans));}
}

/退火算法 退火了一下午还是wa

#include<bits/stdc++.h>
#define mp              make_pair
#define sz(x)           int((x).size())
#define fin             freopen("in.txt","r",stdin)
#define fout            freopen("out.txt","w",stdout)
#define io              ios::sync_with_stdio(0),cin.tie(0)
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 1e4 + 5;
int n;double X,Y;
struct point { double x=0,y=0; } p[maxn],now,nex,ansp;
double dis(point a,point b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); }
double f(point x)
{  //评估函数double res = -1.0;for (int i=1;i<=n;i++) res=max(res,dis(x,p[i]));return res;
}
double ans;
void sa()
{ans=1e111;//最开始的能量值,初始很大就可以,不用修改double T=1e8;       //初始温度,         (可以适当修改,最好和给的数据最大范围相同,或者缩小其原来0.1)double d=0.9998;     //降温系数          (可以适当修改,影响结果的精度和循环的次数,)double eps=1e-4;    //最终温度          (要是因为精度问题,可以适当减小最终温度)double TT=1;        //采纳新解的初始概率double dd=0.99;     //(可以适当修改,采纳新解变更的概率)(这个概率下面新解更新的时候,最好和未采纳的新解更新的次数是一半一半)double res=f(now);  //传入的初始默认解(now)下得到的评估能量值if (res<ans) ans=res,ansp=now;//ansp终解int num=0;while (T>eps){for (double i=-1;i<=1;++i)for (double j=-1;j<=1;++j)if ((now.x+T*i>=eps)&&(now.x+T*i<=X)&&(now.y+T*j<=Y)&&(now.y+T*j>=eps)){nex.x=now.x+T*i,nex.y=now.y+T*j;//新解double tmp=f(nex);//新解下的评估能量值if (tmp<ans) ans=tmp,ansp=nex;//降温成功,更新当前最优解if (tmp<res) res=tmp,now=nex;// 降温成功,采纳新解else if (TT>rand()%10000/10000.0) res=tmp,now=nex,cout<<"======"<<endl;//没有 降温成功,但是以一定的概率采纳新解else cout<<"="<<endl;//用于测试,设定的采纳新解的概率,是否为一半一半,可以适当修改降温参数dd}T*=d; TT*=dd;num++;}//cout<<num<<endl;
}
int main()
{srand(time(0));while(cin>>X>>Y>>n){//     cin>>X>>Y>>n;now.x=now.y=0;for (int i=1;i<=n;++i){cin>>p[i].x>>p[i].y;//scanf("%f%f",&p[i].x,&p[i].y);now.x+=p[i].x,now.y+=p[i].y;}//cout<<now.x<<' '<<now.y<<endl;now.x/=n,now.y/=n;sa();printf("(%.2f,%.2f).\n",ansp.x,ansp.y);printf("%.2f\n",ans);}return 0;
}

hdu 3932Groundhog Build Home 【爬山算法】相关推荐

  1. 【HDU - 5017】Ellipsoid(爬山算法,模拟退火,三分)

    题干: Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distance between the origina ...

  2. 推荐算法-聚类-均值偏移聚类(爬山算法)

    均值偏移(Mean shift)聚类算法是一种基于滑动窗口(sliding-window)的算法,它视图找到密集的数据点.而且,它还是一种基于中心的算法,他的目标是定位每一组群/类的中心点,通过更新中 ...

  3. poj 2069 Super Star 最小求覆盖【爬山算法】

    题意:给定几个点,要求覆盖这些点的最小球半径.(求到n个点的最大距离最小化的点 因为是单峰的所以可以用爬山算法 主要是我的退火算法板子精度达不到? //#include<bits/stdc++. ...

  4. 爬山算法和模拟退火算法简介(转)

    源:爬山算法和模拟退火算法简介 一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为 ...

  5. Python编写的数字拼图游戏(含爬山算法人机对战功能)

    数字拼图游戏与拼图游戏原理一致,把打乱了的数字或图片经移动,拼成给定的目标数字或图片,其中总有一个空的地方,让相邻(上下左右)的方块移动,直至达到目标. 游戏代码由浙江温州永嘉县教师发展中心应根球老师 ...

  6. Python使用爬山算法寻找序列“最大值”

    爬山算法是人工智能算法的一种,特点在于局部择优,所以不一定能够得到全局最优解,尽管效率比较高.使用爬山算法寻找序列最大值的思路是:在能看得到的局部范围内寻找最大值,如果当前元素已经是最大值就结束,如果 ...

  7. python拼图游戏代码的理解_Python编写的数字拼图游戏(含爬山算法人机对战功能)...

    数字拼图游戏与拼图游戏原理一致,把打乱了的数字或图片经移动,拼成给定的目标数字或图片,其中总有一个空的地方,让相邻(上下左右)的方块移动,直至达到目标. 游戏代码由浙江温州永嘉县教师发展中心应根球老师 ...

  8. python爬山算法

    这篇文章主要介绍了爬山算法,爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)然后用Python实现了这个算法,需要的朋友可以参考下 ...

  9. 爬山算法改进粒子群求解测试测试函数shubert,测试函数的100种优化方法之14

    爬山算法粒子群求解测试测试函数 shubert函数属于周期性多峰函数,如图1所示拥有多个全局最优值,如图二所示在一个周期内只有一个全局最优值,局部最优解较多,适合测试算法的收敛性能,粒子群算法是一种收 ...

最新文章

  1. vSphere 5.0系列之二 vSphere Client的安装
  2. Python开发入门与实战1-开发环境
  3. C++求二叉树的最大高度差
  4. 小白自学深度学习——目录
  5. Android中调用webservice的工具类
  6. 什么是堆栈的构造方法?向上生长堆栈,向下生长堆栈
  7. 深入谷歌开源项目【1】 - Camer2 - 环境搭建和源码编译
  8. spark在集群上运行
  9. 《计算机系统:系统架构与操作系统的高度集成》——1.5 计算机硬件的演化...
  10. 时间序列分析与非参数统计
  11. Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
  12. PLC供电系统电源模块的选择
  13. Total Variation
  14. 关于安卓开发,在鸿蒙系统应用时,File读取文被拒绝访问的解决方案
  15. matlab如何画波特图,matlab画波特图
  16. 机器学习----代价函数(cost function)
  17. 用计算机来画出整个方格图,怎么画小学数学中的方格图
  18. SpringBoot配置文件yml读取注意问题
  19. 网易云音乐网络问题修复 (加载失败)
  20. 亚马逊 ec2 连接不上_在Amazon EC2上轻松进行蓝绿色部署

热门文章

  1. petshop 出现没有为 SQL 缓存通知启用数据库“MSPetShop4”
  2. Qt显示中文ansi字符串乱码问题解决方案
  3. Firefox 65.0.2 发布,Firefox 66 预计3月19日推出
  4. Mac终端(Terminal)自定义颜色,字体,背景
  5. tpcc-mysql的使用
  6. 分布式对象存储系统在openstack中的应用研究--Ceph(一)
  7. C# 设置Menustrip提示框的显示
  8. Spring Boot 核心配置文件详解
  9. Linux下调试python
  10. 设置远程访问mysql服务端的日志