解题思路:最小圆覆盖,注意由于树也有半径,所以要加上树的半径0.5

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const double eps=1e-8;struct Point
{double x,y;
}p[505];double dis(const Point &a,const Point &b)
{return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} Point circumcenter(const Point &a,const Point &b,const Point &c)
{ //返回三角形的外心 Point ret; double a1=b.x-a.x,b1=b.y-a.y,c1=(a1*a1+b1*b1)/2;double a2=c.x-a.x,b2=c.y-a.y,c2=(a2*a2+b2*b2)/2;double d=a1*b2-a2*b1;ret.x=a.x+(c1*b2-c2*b1)/d;ret.y=a.y+(a1*c2-a2*c1)/d;return ret;
} void min_cover_circle(Point *p,int n,Point &c,double &r){ //c为圆心,r为半径 random_shuffle(p,p+n); c=p[0]; r=0;for(int i=1;i<n;i++){if(dis(p[i],c)>r+eps)  //第一个点{ c=p[i]; r=0;for(int j=0;j<i;j++)if(dis(p[j],c)>r+eps) //第二个点{c.x=(p[i].x+p[j].x)/2;c.y=(p[i].y+p[j].y)/2;r=dis(p[j],c);for(int k=0;k<j;k++)if(dis(p[k],c)>r+eps) //第三个点{//求外接圆圆心,三点必不共线 c=circumcenter(p[i],p[j],p[k]); r=dis(p[i],c); } }  }    }
} int main()
{int n;Point c;double r; while(scanf("%d",&n)==1 && n){for(int i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);min_cover_circle(p,n,c,r);                    printf("%.2lf\n",r + 0.5);                   } return 0;
}

hdu 2215(最小圆覆盖)相关推荐

  1. ZOJ - 1450 Minimal Circle HDU - 3007 Buried memory 最小圆覆盖模板 【随机函数】【增量法】

    题意 给N个点,求最小的圆将这N个点全部覆盖,输出圆心坐标和半径 分析 最小的圆肯定落在三个点上,因此暴力枚举圆上的三个点即可,点增量算法O(n ^ 3),加入随机化,平均复杂度可以降到O(n^2) ...

  2. 最小球覆盖最小圆覆盖 题目总结

    最小圆覆盖: HYSBZ 1337 最小圆覆盖 给出平面上N个点,N<=10^5.请求出一个半径最小的圆覆盖住所有的点 Input 第一行给出数字N,现在N行,每行两个实数x,y表示其坐标. O ...

  3. HDU2215(最小圆覆盖问题)

    题意:就是求最小圆覆盖问题 方法一: #include<iostream> #include<algorithm> #include<cmath> #include ...

  4. 【hdoj】3007 Buried memory 【计算几何--最小圆覆盖】

    传送门:Buried memory 苍天饶过谁,第三次在hdoj上 交计算几何的题了,没一次是AC的. ┭┮﹏┭┮都是模板题啊,我都是抄板子的啊,为什么会这样,我怎么这么菜. 题意: 求最小圆覆盖 的 ...

  5. POJ 2069最小球覆盖 HDU3007最小圆覆盖【模拟淬火算法】

    POJ 2069最小球覆盖 1.给定N个三维点,要求覆盖这些点的最小球半径: 2.采用模拟淬火算法,随机选取一个点作为初始解,然后不断向当前最远的点靠近: 3.这是一个不断调整的过程,对应模拟淬火算法 ...

  6. P1742 最小圆覆盖

    P1742 最小圆覆盖 题意: 给出N个点,让你画一个最小的包含所有点的圆. 题解: 先说结论: 最优解的圆一定是在以某两个点连线为直径的圆 或者 某三个点组成的三角形的外接圆 初始化将某个圆心定为第 ...

  7. ZOJ 1450 Minimal Circle 点集的最小圆覆盖

    From: http://blog.csdn.net/zmx354/article/details/17076267 给定一个点集,求出能覆盖点集内所有点的半径最小的圆.包含点在圆上的情况.个人感觉算 ...

  8. luoguP1742 最小圆覆盖

    最小圆覆盖 首先 没错,我是个蒟蒻.luogu 流程 圆 C; for(i=1 to n) {if(P[i] 不在 C 内) {C = {P[i], 0};for(j=1 to i-1) {if(P[ ...

  9. 随机增量法:bzoj 1336 bzoj 1337 最小圆覆盖

    1337: 最小圆覆盖 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1170  Solved: 573 [Submit][Status][Discus ...

最新文章

  1. MMA冠军Rory MacDonald:比特币现金(BCH)是真正的比特币
  2. Linux存储入门:简易数据恢复方案--分区和LVM实战
  3. python入门需要多久-零基础小白多久能学会python
  4. classcastexception异常_内部类、异常以及 LeetCode 每日一题
  5. 成立仅8个月的个人网站,月收入几十万美金
  6. idea中,springboot项目部署到docker
  7. python安装selenium报错_新手用Python运行selenium的常见问题
  8. Go语言中使用SQLite数据库
  9. clickhouse 部署+介绍
  10. bsp 总结正规流程
  11. springboot 使用spring security
  12. Linux服务器期末复习总结
  13. Tableau 将 null 值显示在 0 处 (ZN 函数 或 显示特殊值)
  14. 多线程调用ch.ethz.ssh2.Connection执行shell任务时有的执行丢失情况解决
  15. 一道输出超限nnnn次的题
  16. win10任务栏图标无法固定,也无法取消固定,
  17. Miko二次元动漫视频网站源码 视频播放带仿哔哩哔哩视频字幕弹幕
  18. 数字图像处理100问—40 JPEG 压缩——第四步:YCbCr+离散余弦变换+量化
  19. PAT_乙级1010
  20. java达达租车接口_Java实现一个达达租车系统的步骤详解

热门文章

  1. 六大环节,教你如何从 0 到 1 搭建一场 A/B 测试
  2. 2018创投圈风云再起,企服征途百家争鸣,寻找中国创业最强音!
  3. 我们坚持专业与创新,U can U up
  4. iOS iOS9下修改回HTTP模式进行网络请求
  5. 《AR与VR开发实战》——2.7 3D物体识别
  6. 金蝶记账王无法打开智能卡注册页面怎么办
  7. nodemailer实现node发送邮件
  8. android项目中刷新activity界面
  9. 逆序数2 HDOJ 1394 Minimum Inversion Number
  10. python 调试命令