zoj 1450 Minimal Circle 最小覆盖圆
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=450
You are to write a program to find a circle which covers a set of points and has the minimal area. There will be no more than 100 points in one problem.
题意描述:找到一个最小圆能够包含到所有的二维坐标点。
算法分析:最小覆盖圆的做法。
- //最小覆盖圆
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<algorithm>
- #define inf 0x7fffffff
- #define exp 1e-10
- #define PI 3.141592654
- using namespace std;
- const int maxn=+;
- struct Point
- {
- double x,y;
- Point(double x=,double y=):x(x),y(y){}
- }an[maxn],d;//d:最小覆盖圆的圆心坐标
- double r;//最小覆盖圆的半径
- typedef Point Vector;
- Vector operator + (Vector A,Vector B) {return Vector(A.x+B.x , A.y+B.y); }
- Vector operator - (Vector A,Vector B) {return Vector(A.x-B.x , A.y-B.y); }
- Vector operator * (Vector A,double p) {return Vector(A.x*p , A.y*p); }
- Vector operator / (Vector A,double p) {return Vector(A.x/p , A.y/p); }
- int dcmp(double x)
- {
- if (fabs(x)<exp) return ;
- return x< ? - : ;
- }
- double cross(Vector A,Vector B)
- {
- return A.x*B.y-B.x*A.y;
- }
- double dist(Vector A,Vector B)
- {
- double x=(A.x-B.x)*(A.x-B.x);
- double y=(A.y-B.y)*(A.y-B.y);
- return sqrt(x+y);
- }
- void MiniDiscWith2Point(Point p,Point q,int n)
- {
- d=(p+q)/2.0;
- r=dist(p,q)/;
- int k;
- double c1,c2,t1,t2,t3;
- for (k= ;k<=n ;k++)
- {
- if (dist(d,an[k])<=r) continue;
- if (dcmp(cross(p-an[k],q-an[k]))!=)
- {
- c1=(p.x*p.x+p.y*p.y-q.x*q.x-q.y*q.y)/2.0;
- c2=(p.x*p.x+p.y*p.y-an[k].x*an[k].x-an[k].y*an[k].y)/2.0;
- d.x=(c1*(p.y-an[k].y)-c2*(p.y-q.y))/((p.x-q.x)*(p.y-an[k].y)-(p.x-an[k].x)*(p.y-q.y));
- d.y=(c1*(p.x-an[k].x)-c2*(p.x-q.x))/((p.y-q.y)*(p.x-an[k].x)-(p.y-an[k].y)*(p.x-q.x));
- r=dist(d,an[k]);
- }
- else
- {
- t1=dist(p,q);
- t2=dist(q,an[k]);
- t3=dist(p,an[k]);
- if (t1>=t2 && t1>=t3)
- {
- d=(p+q)/2.0;
- r=dist(p,q)/2.0;
- }
- else if (t2>=t1 && t2>=t3)
- {
- d=(an[k]+q)/2.0;
- r=dist(an[k],q)/2.0;
- }
- else
- {
- d=(an[k]+p)/2.0;
- r=dist(an[k],p)/2.0;
- }
- }
- }
- }
- void MiniDiscWithPoint(Point p,int n)
- {
- d=(p+an[])/2.0;
- r=dist(p,an[])/2.0;
- int j;
- for (j= ;j<=n ;j++)
- {
- if (dist(d,an[j])<=r) continue;
- else
- {
- MiniDiscWith2Point(p,an[j],j-);
- }
- }
- }
- int main()
- {
- int n;
- while (scanf("%d",&n)!=EOF && n)
- {
- for (int i= ;i<=n ;i++)
- {
- scanf("%lf%lf",&an[i].x,&an[i].y);
- }
- if (n==)
- {
- printf("%lf %lf\n",an[].x,an[].y);
- continue;
- }
- r=dist(an[],an[])/2.0;
- d=(an[]+an[])/2.0;
- for (int i= ;i<=n ;i++)
- {
- if (dist(d,an[i])<=r) continue;
- else
- MiniDiscWithPoint(an[i],i-);
- }
- printf("%.2lf %.2lf %.2lf\n",d.x,d.y,r);
- }
- return ;
- }
zoj 1450 Minimal Circle 最小覆盖圆的更多相关文章
- HDU 3007 Buried memory & ZOJ 1450 Minimal Circle
题意:给出n个点,求最小包围圆. 解法:这两天一直在学这个神奇的随机增量算法……看了这个http://soft.cs.tsinghua.edu.cn/blog/?q=node/1066之后自己写了好久 ...
- ZOJ 1450 Minimal Circle 最小圆覆盖
套了个模板直接上,貌似没有随机化序列 QAQ //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler #in ...
- Maple trees(最小覆盖圆)
Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- [hdu-3007]Buried memory 最小覆盖圆
大致题意: 平面上有n个点,求一个最小的圆覆盖住所有点 最小覆盖圆裸题 学习了一波最小覆盖圆算法 #include<cstdio> #include<iostream> #in ...
- ZOJ1450 Minimal Circle 最小圆覆盖
ZOJ1450 给定N个点(N<=100)求最小的圆把这些点全部覆盖 考虑对于三角形,可以唯一的找到外接圆,而多边形又可以分解为三角形,所以对于多边形也可以找到唯一的最小覆盖圆. #includ ...
- ZOJ1450 Minimal Circle
You are to write a program to find a circle which covers a set of points and has the minimal area. T ...
- hdu 2215 & hdu 3932(最小覆盖圆)
Maple trees Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- [LeetCode] Generate Random Point in a Circle 生成圆中的随机点
Given the radius and x-y positions of the center of a circle, write a function randPoint which gener ...
- Judge Route Circle --判断圆路线
Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot m ...
随机推荐
- Filestream读取或写入文件
using System.IO;//引用 System.IO namespace filestream { public partial class Form1 : Form { public For ...
- Vue.js学习 Item12 – 内部响应式原理探究
深入响应式原理 大部分的基础内容我们已经讲到了,现在讲点底层内容.Vue.js 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图.这让状态管理非常简单且直观,不过理解它的原理也很重 ...
- 工作中nginx配置文件的一些参数记录
reset_timedout_connection on 告诉nginx关闭不响应的客户端连接.这将会释放那个客户端所占有的内存空间 tcp_nopush on 告诉nginx在一个数据包里发送许多个 ...
- Hbase Interface HConnection
HTablePool 在Hbase 0.94.0.95.0.97被废弃,在0.98中被清除( HTablePool 对比HConnection.getTable),hbase0.98 HTablePo ...
- Ueditor防止代码自动清除
Ueditor功能真的很牛逼,可也有让人悲催的地方,尤其是自动清除代码,会将你默认的div标签改成p,挺让人闹心的,不过Ueditor的开发人员还是满热心的,搜遍网上无答案的时候,问了下他们,解决了 ...
- 亚信联创--java面试题目总结
这几天投简历,只有两家的HR表示感兴趣.易思卓越和亚信联创,不管怎样如果能有机会面试都一定尽力表现,所以找了找网上的面经,这里先把题目总结一下. 职位要求如下: ------------------- ...
- RecyclerView的基本创建
线性显示 类似于listview: 线性宫格显示 类似于grid view: 用线性宫格显示 类似于瀑布流: 结构图: 测试代码: activity_main.xml: <RelativeLay ...
- Android计时器TimerTask,Timer,Handler
Android计时器TimerTask,Timer,若要在TimerTask中更新主线程UI,鉴于Android编程模型不允许在非主线程中更新主线程UI,因此需要结合Android的Handler实现 ...
- char型变量理解
char c = 128; printf("%d", c); 问输出是多少? 正确答案应该是-128. 如下几种情况: char c=128;printf("%u\n& ...
- 学习XML总结
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分. 元素可包含其他元素.文本或者两者的混合物.元素也可以拥有属性. xml包含如下: 元素 文本 属性 元素 命名: 名称可以含字母. ...