最近点对

// Name      : 最近点对
// Parameter : 
// Return    : 无
// Reference : 
struct Point{
	int x,y;
	bool operator<(const & a) const{
		if(x!a.x) return x<a.x;
		return y<a.y;
	}
}poi[maxn];
sort(poi,poi+n);
int NearDis(int l,int r,Point a[]){
	if(r==l+1) return Dis(l,r);
	int m=(l+r)/2;
	int d1=NearDis(l,m),d2=NearDis(m,r);
	int d=min(d1,d2);
	int i=l,j=r;
	for(;Dis(i,m)>d;i++);
	for(;Dis(m,j)>d;j--);
	for(int k=i;k<m;k++)
		for(int p=m+1;p<=j;p++)
			d=min(d,Dis(k,p));
	return d; 
}

  

posted on 2013-08-13 11:13  Amyc  阅读(136)  评论(0编辑  收藏  举报