/*2014-6-24
思想:n個節點的圖中,只需要找到權值最小且不與現有邊集合構成環的(n-1)條邊,必成最小生成樹。
方案:將邊的權值進行篩選,每次找到權值最小的邊,補充道邊集合中即可。
難點:如何確保這些邊不構成環——對每個邊,讓其起始節點是祖先,通過洄游尋根,如果祖先相同說明兩個節點是「近親」,會構成閉環:
a-b-c-a三角形中:
1. a-b邊中確定b的祖先和父親都是a;
2. b-c邊中,確定c的父親是b,而b的父親是a,故c的祖先也是a。
3. a-c邊中,c的祖先是a,a的祖先是a,故此時就能構成閉環。
*/#include #include using namespace std;
typedef struct edgetypeedgetype;
edgetype edges[15]=, , , , ,
, , , , ,
, , , ,
};int parent[9]=;
int find(int parent,int father)
int num=1 ;
void kruskal() }}
int main(void)
大話資料結構 (六)最小生成樹
我們在講圖的定義和術語時,曾經提到過,乙個連通圖的生成樹是乙個極小的連通子圖,它含有圖中全部的頂點,但只有足以構成一棵樹的n 1條邊。那麼我們把構造連通網的最小代價生成樹稱為最小生成樹。在了解最小生成樹的概念之後,我們更應該看重的是如何獲取最小生成樹,並如何利用最小生成樹來解決問題。在給出prim演...
資料結構 最小生成樹
生成樹 乙個連通圖的最小連通子圖稱作該圖的生成樹。有n個結點的連通圖的生成樹有n個結點和n 1條邊。乙個有n個結點的連通圖的生成樹是原圖的極小連通子圖,它包含原圖中的所有n個結點,並且有保持圖連通的最少的邊。由生成樹的定義可知 若在生成樹中刪除一條邊,就會使該生成樹因變成非連通圖而不再滿足生成樹的定...
資料結構(最小生成樹)
對於乙個無相連通網,他的所有生成樹中必有一棵邊的權值總和最小的生成樹,稱之為最小代價生成樹,簡稱最小生成樹。最小生成樹必須滿足三個條件 1 構造的最小生成樹必須包括n個頂點 2 構造的最小生成樹有且僅有n 1條邊 3 構造的最小生成樹中不存在迴路。普利姆演算法 prim 假設g v,e 為一無向連通...