使用Python找到具有相同x或y坐标的最近点的程序

使用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)的索引较小。

使用Python找到具有相同x或y坐标的最近点的程序

为了解决这个问题,我们将按照以下步骤进行操作:

  • 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

让我们看一下以下实现以更好地理解。

示例

  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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程