题目大意:原题链接

给出指定的区域,以及平面内的点集,求出一个该区域内一个点的坐标到点集中所有点的最小距离最大.

解题思路:一开始想到用随机化算法解决,但是不知道如何实现。最后看了题解才知道原来是要用模拟退火算法解决。

不过个人感觉这个算法的实现过程中仍然采用了随机化算法。二者均属于概率算法。  参考链接

Point Goto_Rand_Dir(double key,Point temp)函数中,Point temp必须得定义在参数中,不能定义在函数内部,

否则temp没有初始值,无法进行后面的加法运算.

#include<ctime>
#include<cmath>
#include<cstdio>
#include<cstdlib>
const int shift=;
const double inf=1e10;
const double pi=acos(-1.0);
struct Point
{
double x,y;
}p[],randp[]; double Get_Dis(Point a,Point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
Point Get_Rand_Point(int a,int b)
{
Point temp;
temp.x=rand()%a+;
temp.y=rand()%b+;
return temp;
}
Point Goto_Rand_Dir(double key,Point temp)
{
double delta=*pi*(double)rand()/RAND_MAX;
temp.x+=key*sin(delta);
temp.y+=key*cos(delta);
return temp;
} int main()
{
double dis[];
int i,j,k,T,x,y,m;
scanf("%d",&T);
srand(time(NULL));
while(T--){
double now;
Point temp;
scanf("%d%d%d",&x,&y,&m);
for(i=;i<=m;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
for(i=;i<=;i++){//分别往四个方向找四个方向的最小值
dis[i]=inf;
randp[i]=Get_Rand_Point(x,y);//给randp[]数组随机取横纵坐标值
for(j=;j<=m;j++){
now=Get_Dis(randp[i],p[j]);
if(now<dis[i]) dis[i]=now;//dis[i]存的是最小值
}
}
double key=sqrt(1.0*(x*x+y*y))/;//关键
while(key>=0.01){//精度要求
for(i=;i<=;i++){
for(j=;j<=shift;j++){
temp=randp[i];//采用之前四个方向确定的随机横纵坐标值
temp=Goto_Rand_Dir(key,temp);
if(temp.x<||temp.y<||temp.x>x||temp.y>y)
continue;
now=inf;
for(k=;k<=m;k++){
double dist=Get_Dis(temp,p[k]);
if(now>dist) now=dist;//now存的是最小值
}
if(now>dis[i]){
dis[i]=now;//dis[i]中存的是最小值最大
randp[i]=temp;
}
}
}
key=key*0.8;
}
for(i=,k=;i<=;i++)//在四个方向中找最小值最大
if(dis[i]>dis[k]) k=i;
printf("The safest point is (%.1lf, %.1lf).\n",randp[k].x,randp[k].y);
}
}

PKU 1379 Run Away(模拟退火算法)的更多相关文章

  1. poj-1379 Run Away(模拟退火算法)

    题目链接: Run Away Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 7982   Accepted: 2391 De ...

  2. poj 1379 Run Away 模拟退火 难度:1

    Run Away Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6482   Accepted: 1993 Descript ...

  3. POJ.1379.Run Away(模拟退火)

    题目链接 POJ输出不能用%lf! mmp从4:30改到6:00,把4:30交的一改输出也过了. 于是就有了两份代码.. //392K 500MS //用两点构成的矩形更新,就不需要管边界了 #inc ...

  4. 模拟退火算法(run away poj1379)

    http://poj.org/problem?id=1379 Run Away Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: ...

  5. 模拟退火算法-[HDU1109]

    模拟退火算法的原理模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到 ...

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

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

  7. 【高级算法】模拟退火算法解决3SAT问题(C++实现)

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46453761 ---------------------------------- ...

  8. 模拟退火算法(SA)求解TSP 问题(C语言实现)

    这篇文章是之前写的智能算法(遗传算法(GA).粒子群算法(PSO))的补充.其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了. 首先介绍一下模拟退火算法(SA ...

  9. 原创:工作指派问题解决方案---模拟退火算法C实现

    本文忽略了对于模拟退火的算法的理论讲解,读者可参考相关的博文或者其他相关资料,本文着重于算法的实现: /************************************************ ...

随机推荐

  1. openstacksdk resource2 打印__dict__

    在一个继承resource2的实体里,打印self.__dict__结果是: {'_body': <openstack.resource2._ComponentManager object at ...

  2. linux下解压 tar.bz2

    tar xvfj xxx.tar.bz2 转自: http://www.360doc.com/content/12/0907/16/8006573_234845810.shtml

  3. ThinkPHP整合cropper剪裁图片上传功能

    1.先下载核心文件:https://github.com/fengyuanchen/cropper 2. 3.对于index.html文件 4.对于main.js文件 5.对于crop.php文件 & ...

  4. YII2与Thinkphp整合阿里云OSS

    前言: 如果上传的文件都和网站程序源代码放在一起:那是有相当多的弊端的: 1:静态文件会占用大量带宽: 2:服务器的成本略高: 常规的做法是把php源代码放到一台服务器上:图片等静态文件放在另一台服务 ...

  5. 第二十五篇:使用 sigaction 函数实现可靠信号

    前言 在前文中,讲述了一个可靠信号的示例.它分成几个步骤组成( 请参考前文 ).在 Linux 系统编程中,有个方法可以将这些步骤给集成起来,让我们使用起来更加的方便. 那就是调用 sigaction ...

  6. ListView中的方法

    getCount(); getItem(); getItemId(); getView(); getViewCountType();

  7. Masonry介绍与使用实践 - iOS移动开发周报

    本文转发至 http://www.tuicool.com/articles/MRbaEnB/ 原文  http://www.infoq.com/cn/news/2014/11/masonry-intr ...

  8. docker-compose安装elasticsearch集群

    文件目录: 1.编写docker-compose文件 version: '3' services: es-master: image: elasticsearch:6.4.3 container_na ...

  9. style、currentStyle、getComputedStyle(不同浏览器获取css样式)区别介绍

    style.currentStyle.getComputedStyle区别介绍   样式表有三种方式 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效. 内部样 ...

  10. java面向对象基础回顾

    (49)  (0) 面向对象 啥是面向对象 什么是多态多态的机制 接口和抽象类区别 个人理解 代码实现 面向对象 学习java大家接触到的最多的话语无非就是面向对象,可能大家没有仔细研究过这个问题,但 ...