HDU ACM 1007 Quoit Design 分治法求最近点对
来源:互联网 发布:新中新二代身份证软件 编辑:程序博客网 时间:2024/05/09 01:08
题意:给n个点的坐标,求距离最近的一对点之间距离的一半。
分析:分治法求最近点对。
#include<iostream>#include<algorithm>#include<cmath>using namespace std;#define N 100005double min(double a,double b){return a<b?a:b;}struct POINT{double x,y;};POINT point[N],*px[N],*py[N];double dis(const POINT* p1,const POINT* p2){return sqrt(pow(p1->x-p2->x,2.0)+pow(p1->y-p2->y,2.0));}bool cmpx(const POINT* p1,const POINT* p2){return p1->x<p2->x;}bool cmpy(const POINT* p1,const POINT* p2){return p1->y<p2->y;}double core(int s,int e) //分治法求最小点对核心代码{int mid,i,j,cnt;double ans;if(s+1==e) //只有两个点的情况return dis(px[s],px[e]);if(s+2==e) //只有三个点的情况return min(dis(px[s],px[s+1]),min(dis(px[s+1],px[e]),dis(px[s],px[e])));mid=(s+e)>>1;ans=min(core(s,mid),core(mid+1,e)); //递归求解for(cnt=0,i=s;i<=e;i++) //把x坐标在px[mid].x-ans~px[mid].x+ans范围内的点取出来if(px[i]->x>=px[mid]->x-ans && px[i]->x<=px[mid]->x+ans)py[cnt++]=px[i];sort(py,py+cnt,cmpy); //按y值排序for(i=0;i<cnt;i++)for(j=i+1;j<cnt;j++){if(py[j]->y-py[i]->y>=ans)break;ans=min(ans,dis(py[i],py[j]));}return ans;}int main() {int i,n;while(scanf("%d",&n)!=EOF && n){for(i=0;i<n;i++){scanf("%lf%lf",&point[i].x,&point[i].y);px[i]=&point[i];}sort(px,px+n,cmpx); //按x坐标排序printf("%.2lf\n",core(0,n-1)/2.0);} return 0; }
0 0
- hdu 1007 Quoit Design(分治法求最近点对)
- HDU 1007 Quoit Design 分治法求最近点对
- HDU ACM 1007 Quoit Design 分治法求最近点对
- hdu 1007 Quoit Design(分治求最近点对)
- 【分治 求最近点对】hdu 1007 Quoit Design
- HDU 1007 Quoit Design 最近点对 分治法
- hdu 1007 zoj 2107 Quoit Design 求平面最近点对 分治法
- HDU 1007 Quoit Design(分治法求最近点对问题)
- hdu 1007 Quoit Design (最近点对、分治)
- Hdu 1007 - Quoit Design//分治,最近点对,计算几何
- hdu 1007 Quoit Design 最近点对(分治)
- HDU 1007 Quoit Design(最近点对问题:分治)
- hdu 1007 Quoit Design 最近点对(分治)
- 【HDU 1007 】Quoit Design 【分治--最近点对问题】
- 分治 求点对最短距离 hdu 1007 Quoit Design
- hdu 1007 Quoit Design 平面上的最近点对 分治法+鸽笼原理
- hdu 1007 Quoit Design 最近点对
- hdu 1007 Quoit Design 最近点对
- 4.3-2
- $.grep ,$.map,jquery筛选数组之grep、each、inArray、map的用法及遍历json对象
- myBatis 官方参考手册
- oracle 数据类型详解---日期型
- Installing python-ldap in Ubuntu
- HDU ACM 1007 Quoit Design 分治法求最近点对
- OpenDaylight Hydrogen版本应用SampleTap研究(一)
- 6个用于大数据分析的最好工具
- 【Java编程思想】(1)初始化与清理
- CVE-2015-3202 exploit demo
- java hashCode
- mysql存储过程循环语句简单例子
- 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容
- zookeeper原理(转)