博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最小圆覆盖(随机增量||模拟退火)
阅读量:4842 次
发布时间:2019-06-11

本文共 1236 字,大约阅读时间需要 4 分钟。

最小圆覆盖

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 1464  Solved: 737
[][][]

Description

给出平面上N个点,N<=10^5.请求出一个半径最小的圆覆盖住所有的点

Input

第一行给出数字N,现在N行,每行两个实数x,y表示其坐标.

Output

输出最小半径,输出保留三位小数.

Sample Input

4
1 0
0 1
0 -1
-1 0

Sample Output

1.000

 

ac1() 模拟退火,ac2()随机增量法

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 const double eps=1e-8; 9 const double INF=1e20; 10 const double PI=acos(-1.0); 11 12 13 ///pick定理:面积=内部格点数+(边上格点数/2)-1 14 15 int sgn(double x){ 16 if(fabs(x)
0){142 c.p=p[i],c.r=0;143 for(int j=1;j
0){145 c.p=(p[i]+p[j])/2;146 c.r=(c.p-p[j]).len();147 for(int k=1;k
0){149 c=circle(p[i],p[j],p[k]);150 }151 }152 }153 }154 }155 }156 printf("%f\n%f %f\n",c.r,c.p.x,c.p.y);157 }158 159 double dist(Point a,Point b){160 return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));161 }162 163 void ac1(){164 165 double ans=1e99;166 Point tmp;167 tmp.x=tmp.y=0;168 int s=1;169 double step=10000;170 double esp=0.000001;171 while(step>esp){172 for(int i=1;i<=n;i++){173 if(dist(tmp,p[s])
View Code

 

转载于:https://www.cnblogs.com/Fighting-sh/p/10841368.html

你可能感兴趣的文章
前端学数据库之基础操作
查看>>
python模块pymysql
查看>>
DAY-9 Linux基础及常用命令(5)
查看>>
unittest-mock-from-import
查看>>
node入门学习(二)
查看>>
通过js禁止输入空格(试用场景:当用字符串拼接插入dom节点时,onkeyup这些方法都不好使可用这个)...
查看>>
Codeforces Edu Round 48 A-D
查看>>
C++cctype软件包函数摆脱,ASCII码!
查看>>
saltstack笔记
查看>>
(转载)TP5_自定义分页样式
查看>>
Spring3.2 和 jdk8 运行时有冲突
查看>>
WordPress4.1新的函数介绍
查看>>
list<T> 排序
查看>>
结对2.03
查看>>
【vue】vue如何创建一个项目
查看>>
简单的linux压力测试工具webbench
查看>>
ImageLunBo_shape+XML
查看>>
php实现设计模式————单例模式
查看>>
Python OOP(面向对象编程)
查看>>
MySQL安装与测试
查看>>