建圖是圖論基礎
https://blog.csdn.net/nuoyanli/article/details/88842395
最小生成樹:任何只由 的邊構成,幷包含 的所有頂點的樹稱爲 的生成樹( 連通). 加權無向圖 的生成樹的代價是該生成樹的所有邊的代碼(權)的和. 最小代價生成樹是其所有生成樹中代價最小的生成樹。
http://www.javashuo.com/article/p-fgvmztmv-ho.html
普利姆(
)
此算法可以稱爲「加點法」,每次迭代選擇代價最小的邊對應的點,加入到最小生成樹中。算法從某一個頂點
開始,逐漸長大覆蓋整個連通網的所有頂點。
圖的所有頂點集合爲
;
初始令集合
;
在兩個集合
能夠組成的邊中,選擇一條代價最小的邊
,加入到最小生成樹中,並把
併入到集合
中。
重複上述步驟,直到最小生成樹有
條邊或者
個頂點爲止。
克魯斯卡爾( )
假設 是一個含有 個頂點的連通網,則按照克魯斯卡爾算法構造最小生成樹的過程爲:先構造一個只含n個頂點,而邊集爲空的子圖,若將該子圖中各個頂點看成是各棵樹上的根結點,則它是一個含有n棵樹的一個森(摘自 )
算法(克魯斯卡爾算法):(如果想要邊的總長度之和最短,我們自然可以想到首先先選最短的邊)將所有的邊排序,從最小的邊開始選,每次連通最小的邊,不能形成迴路,所以就要求判斷兩點間是否已經連通。爲了優化操作,我們這裏用並查集優化,判斷其是否在一個樹上。如果不在一個樹上,就加進去,繼續添加,直到所有的邊都在一個集合即可(連通)。
時間複雜度爲