Prim算法

原文鏈接:https://blog.csdn.net/justinzengtm/article/details/82748556

Prim是一種最小生成樹算法

什麼是最小生成樹?

無迴路,且包含原圖中的n-1條邊。
包含原圖中的全部頂點。
邊的權重和在所有其他生成樹中最小。
最小生成樹存在,則該圖一定連通。反過來一樣,圖連通,則最小生成樹一定存在。
那麼如何構建滿足以上條件的生成樹?這篇日誌先介紹其中一種常用的普里姆(Prim)算法。Prim算法構建最小生成樹,簡單來說就是在圖中,從某一頂點出發,逐步構建,讓一棵小樹逐漸長大。用一個例子來說明更清晰點吧!首先看下面一張無向網圖:
在這裏插入圖片描述
要構造這張圖的最小生成樹,首先,假設我們從V0頂點開始出發,也就是以V0爲根結點開始建樹,接着往外擴展,從與V0頂點相鄰的頂點中找出權值最小的頂點,可以看到是V6,所以把V6和V0連接起來。
在這裏插入圖片描述
也就是把V6收錄進了這棵最小生成樹中了。接着繼續,從當前樹中頂點的鄰接點中(也就是V0和V6的鄰接點中,找出權值最小的頂點)。可以看到是V1,所以把V1也接入最小生成樹中。
在這裏插入圖片描述
然後繼續,到V2結點,也接入最小生成樹中
在這裏插入圖片描述
因爲不能形成迴路,所以V2和V6之間不能連接(雖然權值最小,等於3)。V0和V1之間也不能連接。所以只能V6和V4連接
在這裏插入圖片描述
最後V4和V5連接,V4再和V3連接,就完成了這棵最小生成樹的構建了。

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章