使用Python找到具有相同x或y坐标的最近点的程序
假设我们有一个给定在名为pts的数组中的点集。我们还有另一个点(x, y),它是我们当前的位置。我们定义一个有效点为,一个点它与我们当前点共享相同的x坐标或相同的y坐标。我们必须返回具有从我们当前位置(x, y)最小的曼哈顿距离的有效点的索引。如果有多个点,则返回具有最小索引的有效点。(注意:两个点(a, b)和(p, q)之间的曼哈顿距离为|a – p| + |b – q|。
因此,如果输入为pts = [(1,2),(3,1),(3,4),(2,3),(4,4)] pt = (2,4),那么输出将为2,因为有两个最近的点(3,4)和(2,3),但(3,4)的索引较小。
为了解决这个问题,我们将按照以下步骤进行操作:
- x,y:= pt
-
idx:= -1
-
smallest:= infinity
-
对于pts中的每个p,进行以下操作:
- 如果p[0]与x相同或p[1]与y相同,则
- dist:= |x – p[0]| + |y – p[1]|
-
如果dist<smallest,那么
-
idx:= 在pts中p的索引
-
smallest:= dist
-
否则当dist等于smallest时,那么
-
如果在pts中p的索引<idx,则
- idx:= 在pts中p的索引
-
smallest:= dist
- idx:= 在pts中p的索引
- dist:= |x – p[0]| + |y – p[1]|
- 如果p[0]与x相同或p[1]与y相同,则
-
返回idx
让我们看一下以下实现以更好地理解。
示例
def solve(pts, pt):
x,y = pt
idx = -1
smallest = float("inf")
for p in pts:
if p[0] == x or p[1] == y:
dist = abs(x - p[0]) + abs(y - p[1])
if dist < smallest:
idx = pts.index(p)
smallest = dist
elif dist == smallest:
if pts.index(p) < idx:
idx = pts.index(p)
smallest = dist
return idx
pts = [(1,2),(3,1),(3,4),(2,3),(4,4)]
pt = (2,4)
print(solve(pts,pt))
输入
[(1,2),(3,1),(3,4),(2,3),(4,4)], (2,4)
输出
2