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

โปรแกรมค้นหาจำนวนจุดยอดขั้นต่ำเพื่อเข้าถึงโหนดทั้งหมดโดยใช้ Python


สมมติว่าเรามีกราฟ acyclic กำกับ โดยมีจุดยอด n จุดและโหนดมีหมายเลขตั้งแต่ 0 ถึง n-1 กราฟจะแสดงด้วยรายการขอบ โดยที่ edge[i] =(u, v) แทนขอบตรงจากโหนด u ถึง โหนด v. เราต้องหาจุดยอดที่เล็กที่สุดที่โหนดทั้งหมดในกราฟสามารถเข้าถึงได้ (เราสามารถคืนจุดยอดในลำดับใดก็ได้)

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมค้นหาจำนวนจุดยอดขั้นต่ำเพื่อเข้าถึงโหนดทั้งหมดโดยใช้ Python

ผลลัพธ์จะเป็น [0,2,3] เนื่องจากจุดยอดทั้งสองนี้ไม่สามารถเข้าถึงได้จากจุดยอดอื่น ดังนั้นหากเราเริ่มจากจุดยอดเหล่านี้ เราก็สามารถครอบคลุมได้ทั้งหมด

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

  • n :=ขนาดของขอบ

  • all_nodes :=ชุดใหม่จากช่วง 0 ถึง n

  • v :=ชุดใหม่

  • สำหรับแต่ละขอบ (i, j) ในขอบ ทำ

    • เพิ่ม j ลงใน v

  • ans :=ลบขอบทั่วไปทั้งหมดออกจาก all_nodes และ v ออกจาก all_nodes

  • กลับมาอีกครั้ง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

def solve(edges):
   n = len(edges)
   all_nodes = set(range(n))
   v = set()
   for edge in edges:
      v.add(edge[1])
   ans = all_nodes - v
   return ans
edges = [(0,1),(2,1),(3,1),(1,4),(2,4)]
print(solve(edges))

อินพุต

[(0,1),(2,1),(3,1),(1,4),(2,4)]

ผลลัพธ์

{0, 2, 3}