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