📜  门|门CS 2008 |第 34 题(1)

📅  最后修改于: 2023-12-03 14:58:36.706000             🧑  作者: Mango

门|门CS 2008 |第 34 题

该题是一道经典的计算几何问题。给定平面上的n个点,求距离最远的两个点之间的距离。

思路

可以使用蛮力法,即对于每一对点求距离,时间复杂度为O(n^2),不过因为n的范围最大为300,所以这种算法可以通过。

还有一种更高效的算法叫做"旋转卡壳"算法,可以将时间复杂度优化到O(nlogn)。具体实现比较复杂,有兴趣的童鞋可以自行了解。

代码

以下是蛮力法的代码,时间复杂度为O(n^2),使用Python语言实现。

import math

def distance(x1, y1, x2, y2):
    return math.sqrt((x1-x2)**2 + (y1-y2)**2)

n = int(input())
points = []
for i in range(n):
    x, y = map(int, input().split())
    points.append((x, y))

max_distance = 0
for i in range(n):
    for j in range(i+1, n):
        d = distance(points[i][0], points[i][1], points[j][0], points[j][1])
        if d > max_distance:
            max_distance = d

print('{:.4f}'.format(max_distance))

该代码先输入点的数量n,然后逐个输入每个点的坐标。接着循环每一对点,计算它们之间的距离,记录下最大距离,最后输出结果。

返回的代码片段使用markdown标明,如下所示。

```python
import math

def distance(x1, y1, x2, y2):
    return math.sqrt((x1-x2)**2 + (y1-y2)**2)

n = int(input())
points = []
for i in range(n):
    x, y = map(int, input().split())
    points.append((x, y))

max_distance = 0
for i in range(n):
    for j in range(i+1, n):
        d = distance(points[i][0], points[i][1], points[j][0], points[j][1])
        if d > max_distance:
            max_distance = d

print('{:.4f}'.format(max_distance))