สมมติว่าเราได้รับกราฟและขอให้ค้นหา 'Minimum Spanning Tree' (MST) จากกราฟนั้น MST ของกราฟเป็นส่วนย่อยของกราฟแบบถ่วงน้ำหนักซึ่งมีจุดยอดทั้งหมดอยู่และเชื่อมต่อกัน และไม่มีวงจรในส่วนย่อย MST เรียกว่าค่าต่ำสุด เนื่องจากน้ำหนักขอบรวมของ MST เป็นค่าต่ำสุดที่เป็นไปได้จากกราฟ ดังนั้น ในที่นี้ เราใช้อัลกอริทึม MST ของ Prim และค้นหาน้ำหนักขอบทั้งหมดของ MST จากกราฟที่กำหนด
ดังนั้นหากอินพุตเป็นแบบ

จำนวนจุดยอด (n) คือ 4 และเริ่มจุดยอด (s) =3 จากนั้นผลลัพธ์จะเป็น 14
MST จากกราฟนี้จะเป็น −

น้ำหนักขอบรวมของ MST นี้คือ 14
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน mst_find() นี่จะใช้เวลา G, s
- ระยะทาง :=รายการใหม่ของขนาด G ที่เริ่มต้นด้วยค่าลบอนันต์
- ระยะทาง[s] :=0
- itr :=รายการใหม่ของขนาด G เริ่มต้นด้วยค่า False
- ค :=0
- ในขณะที่ True ทำ
- min_weight :=อินฟินิตี้
- m_idx :=-1
- สำหรับ i ในช่วง 0 ถึงขนาด G ให้ทำ
- ถ้า itr[i] เหมือนกับ False แล้ว
- ถ้าระยะทาง[i]
- min_weight :=ระยะทาง[i]
- m_idx :=ฉัน
- ถ้าระยะทาง[i]
- ถ้า itr[i] เหมือนกับ False แล้ว
- ถ้า m_idx เหมือนกับ -1 แล้ว
- ออกมาจากวงจร
- c :=c + min_weight
- itr[m_idx] :=จริง
- สำหรับแต่ละคู่ i, j ในค่าของ G[m_idx], do
- ระยะทาง[i] :=ระยะทางขั้นต่ำ[i], j
- คืนค
- u :=item[0]
- v :=item[1]
- w :=item[2]
- u :=u - 1
- v :=v - 1
- min_weight =นาที (G[u, v], w)
- G[u, v] :=min_weight
- G[v, u] :=min_weight
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def mst_find(G, s):distance =[float("inf")] * len(G) distance[s] =0 itr =[False] * len(G) c =0 while True:min_weight =float("inf") m_idx =-1 for i in range(len(G)):if itr[i] ==False:if distance[i] อินพุต
4, [(1, 2, 5), (1, 3, 5), (2, 3, 7), (1, 4, 4)], 3
ผลลัพธ์
14