上篇博客我們聊了圖的物理存儲結構鄰接矩陣和鄰接鏈表,然后在此基礎上給出了圖的深度優(yōu)先搜索和廣度優(yōu)先搜索。本篇博客就在上一篇博客的基礎上進行延伸,也是關于圖的。今天博客中主要介紹兩種算法,都是關于最小生成樹的,一種是Prim算法,另一個是Kruskal算法。這兩種算法是很經(jīng)典的,也是圖中比較重要的算法了。

今天博客會先聊一聊Prim算法是如何生成最小生成樹的,然后給出具體步驟的示例圖,最后給出具體的代碼實現(xiàn),并進行測試。當然Kruskal算法也是會給出具體的示例圖,然后給出具體的代碼和測試用例。當然本篇博客中的Demo是在上篇博客的基礎上進行實現(xiàn)的。因為在上篇博客中我們已經(jīng)創(chuàng)建好了現(xiàn)成的圖了,本篇博客就拿過來直接使用。

在本篇博客的開頭呢,先簡單的聊一下什么是最小生成樹。最小生成樹是原圖的最小連通子圖,也就是說該子圖是連通的并且沒有多余的邊,更不會形成回路。最重要的是最小生成樹的所有邊的權值相加最小,這也是最小生成樹的來源。與現(xiàn)實生活中聯(lián)系起來那就是一些村莊要通電話線,如何讓每個村都可以通電話線并且最省材料。換句話說,是每個村莊連通,并且總線路最短,如果線連接完畢后,其實就是我們本篇博客要聊的最小生成樹。

 

一、普利姆算法

接下來我們就來聊Prim算法。其實Prim算法創(chuàng)建最小生成樹的主要思路就是從候選節(jié)點中選擇最小的權值添加到最小生成樹中。下圖是我們之前創(chuàng)建的圖使用Prim算法創(chuàng)建最小生成樹的完整過程。紅色的邊就是每一步所對應的候選節(jié)點做連的弧,從這些候選的邊中選出權值最小的邊添加到最小生成樹中,我們可以將其視為轉正的過程。

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式