最小生成樹克魯斯卡爾演算法
❶ 最小生成樹問題(克魯斯卡爾演算法)
看過,的確不錯。謝謝樓主
❷ 用克魯斯卡爾演算法求下圖的最小生成樹,要求給出求解過程.
你只要按深度優先或按廣度優先遍歷這個圖,就可以得到你所說的樹了
❸ 已知一個無向圖如下,分別用普里姆和克魯斯卡爾演算法生成最小生成樹(假設以1為起點,試畫出構造過程)。
1)普里姆演算法思想
從圖中任意取出一個頂點, 把它當成棵樹,然後從與這棵樹相接的邊中選取一條最短(權值最小)的邊, 並將這條邊及其所連接的頂點也並入這棵樹中,此時得到了一棵有兩個頂點的樹。然後從與這棵樹相接的邊中選取一條最短的邊,並將這條邊及其所連頂點並入當前樹中,得到一棵有3個頂點的樹。以此類推,直到圖中所有頂點都被並入樹中為止,此時得到的生成樹就是最小生成樹。
2)克魯斯卡爾演算法思想
先將邊中的權值從小到大排序,每次找出候選邊中權值最小的邊,就將該邊並入生成樹中。重復此過程直到所有邊都被檢測完為止。其中要注意的是克魯斯卡爾演算法需要用到並查集,以此來判斷接下來要並入的邊是否會和已並入的邊構成迴路。這兩個圖分別用普里姆和克魯斯卡爾生成的最小生成樹見圖。
需要注意的是,在接下來要並入的最小權值不唯一的情況下,可以選取的邊是不唯一的,所以其最小生成樹也不唯一。(純手打,望採納,謝謝。)
❹ 克魯斯卡爾演算法求最小生成樹
克魯斯卡爾演算法的基本思想,這是我自己結合教材理解的,難免有誤,謹慎參考:
1:將圖中的n頂點看成是n個集合。解釋為,圖中共有6個頂點,那麼就有六個集合。即a,b,c,d,e,f各自分別都是一個集合。{a},{b}等。
2:按權值由小到大的順序選擇邊。所選邊應滿足兩個頂點不在同一個頂點集合內。將該邊放到生成樹邊的集合,同時將該邊的兩個頂點所在的集合合並。這是書上的描述,可能有點難理解,這里解釋一下:
首先,選擇權值最小的邊,即為圖中的(a,c)邊,此時a,c滿足不在同一個頂點集合內,將這個邊記錄下來,然後合並這兩個頂點的集合,即此時剩下五個頂點集合了,{a,c},{b},{d},{e},{f}
3:重復步驟2,直到所有的頂點都在同一個集合內!解釋如下:
此時剩下的邊中權值最小的為(d,f),滿足不在同一個頂點集合,所以記錄下該邊,然後合並這兩個頂點集合。新的頂點集合為{a,c} {b} {e} {d,f}
接著,繼續重復,選擇邊(b,e),滿足不在同一個頂點集合內,所以記錄下該邊,然後再次合並這兩個集合,新的集合為{a,c} {d,f} {b,e}
繼續,選擇邊(c,f),滿足不在同一個頂點集合內,所以記錄下該邊,然後合並這兩個頂點所在的集合,新集合為{a,c,d,f} {b,e}
再繼續,選擇權值為15的邊,發現邊(c,d)和邊(a,d)都不滿足條件不在同一個頂點集合內,所以只能選擇邊(b,c),記錄下該邊,然後合並頂點集合,新集合為{a,b,c,d,e,f},此時所有點都在同一集合內,所以結束!
4:將上面我們記錄的那些邊連接起來就行了!這就是最小生成樹,附本人手繪:
❺ 用克魯斯卡爾演算法或者普利姆演算法求下圖的最小生成樹
普利姆演算法我忘了,克魯斯卡爾演算法簡單。
你就畫三張圖,每一張圖都把所有點畫出來先;
第一張圖連接BD;
第二張圖連接BD,BA;
第三張圖連接BD,BA,AC;