最小生成樹()

生成樹的概念算法

        

        在一個任意連通圖G中,若是取它的所有頂點和一部分邊構成一個子圖G',即:V(G')=V(G)和E(G')⊆E(G)ide

        若同時知足邊集E(G')中的全部邊既可以使所有頂點連通而又不造成任何迴路,則稱子圖G'是原圖G的一棵生成樹。blog

        下面簡單說明一下,在既可以連通圖G中的所有n個頂點又沒有造成迴路的子圖G'(即生成樹)中,一定包含n-1條邊。要構造子圖G',首先從圖G中任取一個頂點加入G'中,此時G'中只有一個頂點,假定具備一個頂點的圖是連通的,之後每向G'中加入一個頂點,都要加入以該頂點爲一個端點(終點),以已連通的頂點之中的任一個頂點爲開始頂點的一條邊,這樣既連通了該頂點又不會產生迴路,進行n-1次後,就向G'中加入了n-1個頂點和n-1條邊,使得G'中的n個頂點既連通又不產生迴路。it

       在圖G的一棵生成樹G'中,若再增長一條邊,就會出現一條迴路。這是由於此邊的兩個端點已連通,再加入此邊後,這兩個端點間有兩條路徑,所以就造成了一條迴路,子圖G'也就再也不是生成樹了。一樣,若從生成樹G'中刪去一條邊,就使得G'變爲非連通圖。這是由於此邊的兩個端點是靠此邊惟一連通的,刪除此邊後,一定使這兩個端點分屬於兩個連通份量中,使G'變成了具備兩個兩通份量的非連通圖。class

        同一個連通圖能夠有不一樣的生成樹。例如對於圖9-1(a),其他3個子圖都是它的生成樹。在每棵生成樹中都包含8個頂點和7條邊,即n個頂點和n-1條邊,此時n等於原圖中的頂點數8,它們的差異只是邊的選取方法不一樣。搜索

       在這3棵生成樹中,圖9-1(b)中的邊集是從圖9-1(a)中的頂點V0出發,利用深度優先搜索遍歷的方法而獲得的邊集,此圖是原圖的深度優先生成樹;圖9-1(c)中的邊集是從圖9-1(a)中的頂點V0出發,利用廣度優先搜索遍歷的方法而獲得的邊集,此圖是原圖的廣度優先生成樹;圖9-1(d)是原圖的任意一棵生成樹。固然圖9-1(a)的生成樹遠不止這3種,只要能連通全部頂點而又不產生迴路的任何子圖都是它的生成樹。遍歷

       

       對於一個連通網(即連通帶權圖,假定每條邊上的權值均爲正實數)來講,生成樹不一樣,每棵樹的權(即樹中全部邊上的權值總和)也可能不一樣。圖9-2(a)就是一個連通網,圖9-2(b)、(c)和(d)是它的3棵生成樹,每棵樹的權各不相同。它們分別爲5七、53和38.具備權值最小的生成樹被稱爲圖的最小生成樹。經過後面將要介紹的構造最小生成樹的方法可知,圖9-2(d)是圖9-2(a)的最小生成樹。方法

 


 

最小生成樹是在一個給定的無向圖G(V,E)中求一棵樹Tim

使得這棵樹擁有圖G中的全部頂點img

且全部邊都是來自圖G中的邊

而且知足整棵樹的邊權之和最小

【性質】

① 最小生成樹是樹,所以其邊數等於頂點數減1,且樹中必定不會有環

②對給定的圖G但其(V,E),其最小生成樹能夠不惟一,但其邊權之和必定是惟一的

③因爲最小生成樹是在無向圖上生成的,所以其根結點能夠是這棵樹上的任何一個結點

通常求解最小生成樹有兩種算法

即prim算法和kruskal算法