我们有一个包含n个点(n < 1000)和一个整数d的集合。任务是创建两个不相交的点集A1和A2(它们的并集是给定的n个点),使得从Ai中的每一对点(i = 1或2)之间的欧氏距离小于或等于d。如果无法完成,则打印-1。
例如,输入为:
d = 3 和点集:
(5,3), (1,1), (4,2), (1,3), (5,2), (2,3), (5,1)
我们可以创建:
A1 = {(2,3), (1,3), (1,1)}
A2 = {(5,3), (4,2), (5,2), (5,1)}
因为A1和A2中的每一对点都足够接近。
我真的想知道如何解决这个问题,但是我不知道从哪里开始。由于n很小,算法甚至可以是O(n^2 log n),但我不知道如何开始。我想也许可以先计算每对点之间的距离,然后选择距离最远的两个点,并将它们放在不同的集合中(如果它们的距离大于d)。然后重复此步骤,但问题是如何决定下一个点可以合法地放置在哪里。有人能帮忙设计这个算法吗?