平面內最近點對問題

2022-05-03 13:21:24 字數 659 閱讀 9469

給出同一平面內的 n 個點,求出最近點對的距離

傳送門這裡不討論那種人類精髓做法: 隨機旋轉

考慮分治

把整個點的序列按 x 先排一遍序

如果要分治,顯然是要分開處理某幾個部分在合併

所以我們直接考慮二分,按 x 座標二分,分別求出兩部分的最近距離之後,再合併

接下來我們如何合併

在合併過程中,我們還要考慮,可能存在點對正好跨越我們二分出的 mid 的情況

所以我們加一條限制暴力找一下即可

#includeusing namespace std;

#define re register

#define in inline

#define ll long long

#define db double

#define get getchar()

in int read()

const int _=3e5+9;

int n;

struct yzxa[_];

in db dis(yzx a,yzx b)

in int cmp1(int x,int y)

in int cmp(yzx x,yzx y)

int main()

平面最近點對問題

平面最近點對問題正如其名,給定平面上的 n 個點,找出其中的一對點,使得這對點的距離在所有點對中最小。首先顯而易見地我們可以得到這個問題的 o n 2 演算法,列舉所有點對即可。但是很顯然我們可以注意到,這裡面有很多點對顯然不是最優的,那麼我們可以想到一種剪枝方法,就是將只對x座標差值小於當前已知最...

平面最近點對問題詳解

演算法 0 把所有的點按照橫座標排序 1 用一條豎直的線l將所有的點分成兩等份 2 遞迴算出左半部分的最近兩點距離d1,右半部分的最近兩點距離d2,取d min d1,d2 3 算出 乙個在左半部分,另乙個在右半部分 這樣的點對的最短距離d3。4 結果 min d1,d2,d3 關鍵就是這第3步。貌...

平面最近點對問題求解

問題描述 最近點對問題是指求解平面點集n個點中距離最近的兩個點間的問題。為簡單起見,在二維座標平面來考慮該問題。如果說討論的點以標準二維座標給出,則有點 本章主要通過兩種方法來求解 蠻力法分治法 顧名思義,蠻力法指的就是通過遍歷所有解之後通過對比求出最近點對問題。基本思路 對平面中的n個點兩兩進行組...