(分治法求最近对)1007
来源:互联网 发布:hadoop大数据项目实战 编辑:程序博客网 时间:2024/06/11 04:51
查看原题
代码
#include<cmath>#include<algorithm>using namespace std;int n;struct node{ double x; double y;}p[100005];int a[100005];double cmpx(node a,node b){ return a.x<b.x;}double cmpy(int a,int b){ return p[a].y<p[b].y;}double min(double a,double b){ return a<b?a:b;}double dis(node a,node b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double find(int l,int r){ if(r==l+1)//分割到最后只有两个点时 return dis(p[l],p[r]); if(l+2==r)//分割到最后有三个点时 return min(dis(p[l],p[r]),min(dis(p[l],p[l+1]),dis(p[l+1],p[r]))); int mid=(l+r)/2;//不断分割 double ans=min(find(l,mid),find(mid+1,r));//寻找两个分区中点对的最小距离 int i,j,cnt=0; for(i=l;i<=r;i++) { if(p[i].x>=p[mid].x-ans&&p[i].x<=p[mid].x+ans) a[cnt++]=i;//找到在区间上的点 } sort(a,a+cnt,cmpy);//升序 for(i=0;i<cnt;i++) { for(j=i+1;j<cnt;j++) { if(p[a[j]].y-p[a[i]].y>=ans) break; ans=min(ans,dis(p[a[i]],p[a[j]])); } } return ans;}int main(){ int i; while(scanf("%d",&n)!=EOF) { if(!n) break; for(i=0;i<n;i++) scanf("%lf %lf",&p[i].x,&p[i].y); sort(p,p+n,cmpx); printf("%.2lf%\n",find(0,n-1)/2); } return 0;}
0 0
- (分治法求最近对)1007
- hdu 1007(分治法求最近点对)
- hdu 1007 Quoit Design(分治法求最近点对)
- HDU 1007 Quoit Design 分治法求最近点对
- 分治法求最近点对问题
- 分治法求最近点对
- 分治法求最近点对问题
- hdu1007分治法求最近点对
- 分治法求最近点对
- 分治法求最近点对
- 分治法求最近点对
- hdu1007求最近点对(分治法)
- hdu 1007 Quoit Design(分治求最近点对)
- hdu--1007(分治求二维最近点对)
- 【分治 求最近点对】hdu 1007 Quoit Design
- poj 3714 分治法求最近点对
- poj 3714 Raid 分治法求平面最近点对
- java实现分治法,求平面内最近点对
- 《ACM程序设计》书中题目X
- exec函数族
- 2016.09.20 Win7远程桌面连接Ubuntu14.04
- 队列和循环队列
- L2-001. 紧急救援
- (分治法求最近对)1007
- [译]iOS视图编程指南(View-Programming-Guide-for-iOS)之介绍
- C++调用python3
- Interrupt中断结束线程
- MFC CTreeCtrl 在OnInitDialog里无法勾选Checkbox以及设置隐藏根节点的Checkbox
- 初学linux ---man的使用
- 欧拉回路-并查集
- Progressive Web Apps (pwa)让网页渐进式地变成App !
- ajax 后台拼好json 回到函数弹出返回值是object object 这种形式