一、問題描述
給定平面上n個點,找其中一對點,使得在n個點組成的所有點對中,該點對間的距離最小。
二、演算法描述(偽**)
double cpair(point p, int left , int right)
n=p.size();
if(n<2)
return 0x3f3f3f3f;
1、int mid=(left+right)/2;
構造p1,p2;
p1=p2=
2、double d1=cpair(p,left,m);
double d2=cpair(p,m,right);
double d=min(d1,d2);
3、所有|p[i].x-p[mid].x|4、
stripe中的點按y的大小排序,檢查stripe中的點與其在d範圍內的所有點(最多六個)的距離是否比d小,若小於d,則賦值
return d
三、演算法實現
#include #include #include #include #include #include #include #define min(a,b) (ap[mid-1] the number is mid
d2=cpair(p,mid,num);
d=min(d1,d2);
point *stripe=new point[n];
for(i=0;i
四、結果
最接近點對問題
一維最臨近點對 假設我們用x軸上某個點m將s劃分為2個子集s1和s2 基於平衡子問題的思想,用s中各點座標的中位數來作分割點。遞迴地在s1和s2上找出其最接近點對和,並設d min,s中的最接近點對或者是,或者是,或者是某個,其中p3 s1且q3 s2。如果s的最接近點對是,即 p3 q3 由於在s...
平面最接近點對問題 分治
主要思想就是分治。先把n個點按x座標排序,然後求左邊n 2個和右邊n 2個的最近距離,最後合併。合併要重點說一下,比較麻煩。首先,假設點是n個,編號為1到n。我們要分治求,則找乙個中間的編號mid,先求出1到mid點的最近距離設為d1,還有mid 1到n的最近距離設為d2。這裡的點需要按x座標的順序...
hdu 1007最接近點對問題 nlogn複雜度
include include include include using namespace std define inf 100000000 int n struct point else int tmp 100005 point p 100005 int cmp int a,int b dou...