hdu 1007 (空间最近点对)
来源:互联网 发布:hadoop编译java文件 编辑:程序博客网 时间:2024/05/16 10:19
点击打开链接
现学现卖
推荐大神博客,讲的很好啊!:寻找最近点对
#include"stdio.h"#include"string.h"#include"math.h"#include"algorithm"#define N 100111using namespace std;struct node{double x,y;}A[N];int n;int temp[N]; bool cmpx(const node &p1,const node &p2){if(p1.x!=p2.x)return p1.x<p2.x;else return p1.y<p2.y;}bool cmpy(const int &a,const int &b){return A[a].y<A[b].y;}double dist(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double min(double a,double b){return a<b?a:b;}double solve(int l,int r){if(l==r)return 1000000000;if(l==r-1)return dist(A[l],A[r]);int i,j,k=0,mid;mid=(l+r)/2;double ans=min(solve(l,mid),solve(mid+1,r));//分离出宽度为ans的区间for(i=l;i<=r;i++){if(fabs(A[mid].x-A[i].x)<=ans)temp[k++]=i;}sort(temp,temp+k,cmpy);//线性搜索for(i=0;i<k;i++){for(j=i+1;j<k&&A[temp[j]].y-A[temp[i]].y<ans;j++)ans=min(ans,dist(A[temp[i]],A[temp[j]]));}return ans;}int main(){int i;while(scanf("%d",&n)!=-1&&n){for(i=0;i<n;i++)scanf("%lf%lf",&A[i].x,&A[i].y);sort(A,A+n,cmpx);double ans=solve(0,n-1);printf("%.2f\n",ans/2);}return 0;}
- hdu 1007 (空间最近点对)
- hdu 1007最近点对
- hdu 1007最近点对
- HDU-1007 最近点对
- hdu 1007最近点对
- HDU 1007 最近点对
- hdu 1007最近点对
- hdu 1007(最近点对)
- 二维空间最近点对(分治)
- hdu 1007 经典最近点对 (分治法求解)
- hdu 1007 Quoit Design(最近点对模板)
- hdu 1007 最近点对问题(Splay解法)
- hdu/hdoj 1007 Quoit Design (最近点对问题)
- hdu 1007 Quoit Design(分治求最近点对)
- HDU 1007 平面最近点对(计算集几何)
- hdu 1007 Quoit Design 最近点对(分治)
- 分治法(最近点对)——HDU 1007
- HDU 1007 Quoit Design(最近点对)
- 用U盘或移动硬盘安装Windows7 (超简单制作Win7安装U盘方法)
- Java 类反汇编命令
- Difference between %p and %x
- LINUX常用命令
- java 对接口的一点理解
- hdu 1007 (空间最近点对)
- C语言输出一个汉字
- Java中去除字符串两边空格拦截器StringTrimInterceptor
- 以太网帧最小字节数以及以太网碰撞
- Android进行项目设置的时候初始设置选项含义
- 我的分户热计量系统
- ubuntu截图快捷健
- poj3140(dfs) Contestants Division
- 【项目那些事儿】项目哪些事儿?