我正在为考试而学习,但我无法解决这个问题:
我们得到一组n < 1000 个点和一个整数d。任务是创建两组不相交的点A_1和A_2(给定n个点的集合),使得每对点与A_i(对于 i = 1 或 2)之间的距离(欧几里得)小于或等于d。如果不可能,请打印-1。
例如,输入:
d = 3,并且点:
(5,3), (1,1), (4,2), (1,3), (5,2), (2,3), (5,1)
我们可以创建:
A_1 = { (2,3), (1,3), (1,1) }
A_2 = { (5,3), (4,2), (5,2), (5,1) }
因为来自 A_i 的每一对点(对于 i = 1 或 2)都足够接近。
我真的很想知道如何解决它,但不知道。由于n很小,算法甚至可以是O(n^2 log n),但我不知道如何开始。我在想可能从计算每对点之间的距离开始,然后取两个最大距离的点并将它们放入不同的集合中(如果它们的距离大于 d)。然后对其余的对重复此步骤,但问题是如何决定我可以合法地将下一个点放在哪里。任何人都可以帮助这个算法吗?