最接近的點對問題

2021-06-21 23:17:55 字數 820 閱讀 7356

一、問題描述

給定平面上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...