求平面內最近的點

2021-10-03 19:39:14 字數 1779 閱讀 1988

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define max 2000000000

using

namespace std;

struct node

;bool

operator

<

(const node &t1)};

node *total;

double

getdistance

(node t1,node t2)

bool

com(

const node t1,

const node t2)

//left_set: 左邊集合 right_set: 右邊集合。 d: 左,右集合中最小的距離。 mid : 分界點。 x: 分界點的x值。

double

mid_dist

(int start,

int mid,

int end,

int d,

double x)}}

delete

s;return len;

}double

minimumdist

(int start,

int end)

// vectorleft_set,right_set; //平衡後的左邊 和 右邊

double left_dist,right_dist;

//左邊的最小距離 右邊的最小距離

// int len = (start + end) / 2;

//劃分左右

int mid =

(start + end)/2

;;// cout << start << " " << mid << " " << end << endl;

左邊的最小距離 右邊的最小距離

left_dist =

minimumdist

(start,mid)

; right_dist =

minimumdist

(mid +

1, end)

;//左右中比較小的乙個。

double d =

min(left_dist,right_dist)

;//mid_dist() : 求中間的距離;

d =min(d,

mid_dist

(start,mid,end,d,total[mid]

.x))

;// cout << left_dist << " " << right_dist << " " << d << endl;

return d;

}int

main()

for(

; i <

2* k; i++

)sort

(total,total + i)

;double dist =

minimumdist(0

,i -1)

;printf

("%.3f\n"

,dist)

;delete

total;

}}

平面內最近點對問題

給出同一平面內的 n 個點,求出最近點對的距離 傳送門這裡不討論那種人類精髓做法 隨機旋轉 考慮分治 把整個點的序列按 x 先排一遍序 如果要分治,顯然是要分開處理某幾個部分在合併 所以我們直接考慮二分,按 x 座標二分,分別求出兩部分的最近距離之後,再合併 接下來我們如何合併 在合併過程中,我們還...

置頂 C 求平面最近點對

題目很好理解 給你n個點,求其中距離最近的一對點 之間的距離 很顯然可以列舉,時間複雜度 n2 如果資料強一點 n 100000什麼的 顯然列舉直接掛掉,那麼要怎麼辦呢?這裡就要用到分治 當然是二分 了,時間複雜度 nlog 2n ps.以前幾乎沒做過分治,一來就碰到求最近點對這種題,我當時也看了1...

分治法求平面最近點對入門

一.平面最近點對問題.平面最近點對 在乙個平面上有n nn個點,求出距離最近的兩個點.平面最近點對是計算幾何中乙個十分經典且基礎的問題,通常採用分治法來解決.二.直線最近點對的分治法.在用分治法解決平面最近點對之前,我們用分治法來解決一下直線最近點對問題.考慮在一條直線上暴力列舉兩個點並計算距離取最...