生成樹的概念
在乙個任意連通圖g中,如果取它的全部頂點和一部分邊構成乙個子圖g',即:v(g')=v(g)和e(g')⊆e(g)
若同時滿足邊集e(g')中的所有邊既能夠使全部頂點連通而又不形成任何迴路,則稱子圖g'是原圖g的一棵生成樹。
下面簡單說明一下,在既能夠連通圖g中的全部n個頂點又沒有形成迴路的子圖g'(即生成樹)中,必定包含n-1條邊。要構造子圖g',首先從圖g中任取乙個頂點加入g'中,此時g'中只有乙個頂點,假定具有乙個頂點的圖是連通的,以後每向g'中加入乙個頂點,都要加入以該頂點為乙個端點(終點),以已連通的頂點之中的任乙個頂點為開始頂點的一條邊,這樣既連通了該頂點又不會產生迴路,進行n-1次後,就向g'中加入了n-1個頂點和n-1條邊,使得g'中的n個頂點既連通又不產生迴路。
在圖g的一棵生成樹g'中,若再增加一條邊,就會出現一條迴路。這是因為此邊的兩個端點已連通,再加入此邊後,這兩個端點間有兩條路徑,因此就形成了一條迴路,子圖g'也就不再是生成樹了。同樣,若從生成樹g'中刪去一條邊,就使得g'變為非連通圖。這是因為此邊的兩個端點是靠此邊唯一連通的,刪除此邊後,必定使這兩個端點分屬於兩個連通分量中,使g'變成了具有兩個兩通分量的非連通圖。
同乙個連通圖可以有不同的生成樹。例如對於圖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棵生成樹,每棵樹的權各不相同。它們分別為57、53和38.具有權值最小的生成樹被稱為圖的最小生成樹。通過後面將要介紹的構造最小生成樹的方法可知,圖9-2(d)是圖9-2(a)的最小生成樹。
最小生成樹是在乙個給定的無向圖g(v,e)中求一棵樹t
使得這棵樹擁有圖g中的所有頂點
且所有邊都是來自圖g中的邊
並且滿足整棵樹的邊權之和最小
【性質】
① 最小生成樹是樹,因此其邊數等於頂點數減1,且樹中一定不會有環
②對給定的圖g但其(v,e),其最小生成樹可以不唯一,但其邊權之和一定是唯一的
③由於最小生成樹是在無向圖上生成的,因此其根結點可以是這棵樹上的任何乙個結點
一般求解最小生成樹有兩種演算法
即prim演算法和kruskal演算法
最小生成樹 次小生成樹
一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...
最小生成樹
package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...
最小生成樹
define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...