Swust OJ 794 最近對問題 分治

2022-05-13 03:51:10 字數 1267 閱讀 2330

time limit(ms): 1000      memory limit(kb): 10000

description

設p1=(x1, y1), p2=(x2, y2), …, pn=(xn, yn)是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。

input

多組測試資料,第一行為測試資料組數n(0

output

每組測試資料輸出一行,為該組資料最近點的距離,保留4為小數。

sample input22

0 00 1

30 0

1 11 0

sample output

1.0000

1.0000

hint

algorithm textbook

不想多說,前幾天寫了一篇部落格,主要講的就是平面最近點對的問題,可以戳戳這裡:

直接上**:

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7const

double inf =1e20;

8const

int maxn = 100005;9

10struct

pointpoint[maxn];

1314

intn, mpt[maxn], t;

1516

//以x為基準排序

17bool cmpxy(const point& a, const point&b)

2223

bool cmpy(const

int& a, const

int&b)

2627

double min(double a, double

b)30

31double dis(int i, int

j)34

35double closest_pair(int left, int

right)

51 sort(mpt, mpt +k, cmpy);

52//

線性掃瞄

53for (i = 0; i < k; i++)58}

59return

d;60}61

62int

main()

71return0;

72 }

view code

最近對問題

有n個點,求距離最小的一對點。採用計算出所有點兩兩之間的距離,比較保留最小點距離就可以獲得。這樣時間複雜度為o n2 採用分治的思想來解決問題,可以發現這個問題的難點不在分,而在合併。以下對演算法步驟進行描述 1.找到一條線,將問題分解成兩個子集s1 s2 每個子集的大小為n 2 2.遞迴的發現s1...

最近對問題

設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面n上n個點構成的集合s,最近對問你就是找出集合s中距離最近的點對。暴力法 在蠻力法實現最近點對問題中,將問題簡化 距離最近的點對可能多於一對,找出一對即可,另外只考慮二維平面中的情況。用距離公式即可求 分治法 分治法思想解決此問題時,首先...

最近對問題

n個點在公共空間中,求出所有點對的歐幾里得距離最小的點對。分解對所有的點按照x座標 或者y 從小到大排序 排序方法時間複雜度o nlogn 根據下標進行分割,使得點集分為兩個集合。解決遞迴的尋找兩個集合中的最近點對。取兩個集合最近點對中的最小值min dis left dis right 合併最近距...