Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจุดที่ใกล้ที่สุดที่มีพิกัด x หรือ y เหมือนกันโดยใช้ Python


สมมติว่าเรามีชุดของจุดที่กำหนดในอาร์เรย์ที่เรียกว่า 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 เหมือนกันโดยใช้ Python

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • x, y :=pt

  • idx :=-1

  • เล็กที่สุด :=อนันต์

  • สำหรับแต่ละ p ใน pts ทำ

    • ถ้า p[0] เหมือนกับ x หรือ p[1] เหมือนกับ y แล้ว

      • dist :=|x - p[0]| + |y - p[1]|

      • ถ้า dist <น้อยที่สุด แล้ว

        • idx :=ดัชนีของ p เป็น pts

        • เล็กที่สุด :=dist

      • มิฉะนั้นเมื่อ dist เท่ากับที่เล็กที่สุดแล้ว

        • ถ้าดัชนีของ p เป็น pts

          • idx :=ดัชนีของ p เป็น pts

          • เล็กที่สุด :=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