Quoit Design

2
0 0
1 1
2
1 1
1 1
3
-1.5 0
0 0
0 1.5
0

给你n个平面上的坐标,求平面上的最近点对的距离的一半

关键是求最近点对。如果直接遍历,时间会很大,所以
这里分治,将坐标按x轴排序,然后将点以mid为中线
分为左右两部分,左边最小为点距为d1,右边最小点距为d2
从中取最小值赋值给rad作为新的最小点距。然而,到目前
为止,最小点距还有可能是来自分布在mid两边且横坐标
距离小于rad的两个点,所以将这些点调出来,再进行遍历
更新rad,最后得到真正的rad

 

 

 

 

 

 

#include
using namespace std;
struct node{double x,y;};
node fir[100000],se[100000];
int cmpx(node t1,node t2)
{
    if(t1.x!=t2.x)return t1.x>1;
    double d1=bs(l,mid);
    double d2=bs(mid+1,r);
    rad=min(d1,d2);
    int cnt=0;
    for(int i=l;i<=r;i++){
        if(fabs(fir[i].x-fir[mid].x)<=rad){
            se[cnt++]=fir[i];
        }
    }
    sort(se,se+cnt,cmpy);
    for(int i=0;i>n&&n)
    {
        for(int i=0;i

 

你可能感兴趣的:(二分,三分)