中國著名特級教師教學思想錄26
單擊此處編輯母版標題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,,*,樹和圖,,西安交通大學計教中心,,,,樹的遞歸定義:,樹是由n個具有相同特性的數(shù)據(jù)元素組成的集合。假設n=0,那么稱其為空樹。一棵非空樹T必須滿足:1〕其中有一個特定的元素稱為T的根root。,,2〕除根以外的集合可被劃分為m個不相交的子集T1,T2,…,Tm,其中每個子集都是樹。它們稱為根root的子樹。,G,A,C,F,D,E,B,樹的一般形式,,與樹相關的術(shù)語,,? 結(jié)點:在樹結(jié)構(gòu)中一般把數(shù)據(jù)元素及其假設干指向子樹的分支稱為結(jié)點。,,? 結(jié)點的度:結(jié)點擁有的非空子樹的個數(shù)。,,? 樹的度:樹中所有結(jié)點的度的最大值。,,? 葉子結(jié)點:沒有非空子樹的結(jié)點。,,? 分支結(jié)點:至少有一個非空子樹的結(jié)點。,,? 孩子結(jié)點和父結(jié)點:某結(jié)點所有子樹的根結(jié)點都稱為該結(jié)點的孩子結(jié)點,同時該結(jié)點也稱為其孩子結(jié)點的父結(jié)點。,,? 兄弟結(jié)點:具有相同父結(jié)點的結(jié)點互為兄弟結(jié)點。,,? 結(jié)點的層次:根結(jié)點的層次為1,其子結(jié)點的層次為2。依次類推,子結(jié)點的層次總比父結(jié)點多一層。,,? 樹的深度:樹中結(jié)點所在的最大層次。,,? 有序樹和無序樹:將樹中各結(jié)點的子樹看成自左向右有序的,那么稱該樹為有序樹。否那么稱為無序樹。,,? 森林:由零棵或有限棵互不相交的樹組成的集合。,,二叉樹的定義,,,二叉樹可以是空樹,當二叉樹非空時,其中有一個根元素,余下的元素組成兩個互不相交二叉樹,分別稱為根的左子樹和右子樹。二叉樹是有序樹,也就是說任意結(jié)點的左、右子樹不可交換。而一般樹的子樹間是無序的。,,,特殊形式的二叉樹,滿二叉樹:當二叉樹每個分支結(jié)點的度都是2,且所有葉子結(jié)點都在同一層上,那么稱其為滿二叉樹。完全二叉樹:從滿二叉樹葉子所在的層次中,自右向左連續(xù)刪除假設干葉子所得到的二叉樹被稱為完全二叉樹。滿二叉樹可看作是完全二叉樹的一個特例。,A,F,C,滿二叉樹,G,D,B,E,A,C,完全二叉樹,D,B,E,,二叉樹有以下重要性質(zhì):,〔1〕在二叉樹的第k層上至多有2k-1個結(jié)點(k≥1),,證明:當k=1時,命題顯然成立。假定k=n-1時命題成立,那么第n層〔k=n〕的結(jié)點數(shù)最多是第n-1層的2倍,所以第n層最多有2*2n-2=2n-1個結(jié)點。命題成立。,,,〔2〕深度為h的二叉樹上至多含2h-1個結(jié)點(h≥1),,證明:根據(jù)性質(zhì)1容易知道深度為h的二叉樹最多有20+21+…+2h-1個結(jié)點,即最多有2h-1個結(jié)點。,,〔3〕包含n(n>0)個結(jié)點的二叉樹總的分支數(shù)為n-1,,證明:二叉樹中除了根結(jié)點之外每個元素有且只有一個父結(jié)點。在所有子結(jié)點與父結(jié)點間有且只有一個分支,即除根外每個結(jié)點對應一個分支,因此二叉樹總的分支數(shù)為n-1。,,,,〔4〕任何一棵二叉樹,假設含有n0個葉子結(jié)點、n2個度為2的結(jié)點,那么必存在關系式n0=n2+1,,證明:設二叉樹含有n1個度為1的結(jié)點,那么二叉樹結(jié)點總數(shù)顯然為:,,n0 + n1 + n2 〔2-2〕,,再看看樹的分支數(shù),n2個度為2的結(jié)點必然有2n2個分支,n1個度為1的結(jié)點必然有n1個分支。又因為除根結(jié)點外,其余每個結(jié)點都有一個分支進入。因此二叉樹的分支數(shù)加1就是結(jié)點總數(shù)。即結(jié)點總數(shù)為:,,1 + n1 + 2n2 〔2-3〕,,由〔2-2〕〔2-3〕兩式可知:n0=n2+1,,〔5〕具有n個結(jié)點的完全二叉樹的深度為[log2(n)]+1,,證明:假設二叉樹的深度為h,那么必有2h-1-1<n≤2h-1,于是有2h-1<n+1≤2h,也就是,,2h-1≤n<2h,從而得到h-1≤log2(n)<h,于是h=[log2(n)]+1。,,〔6〕 假設對含n個結(jié)點的完全二叉樹從上到下、從左至右進行1至n的編號,那么對二叉樹中任意一個編號為i的結(jié)點:,,① 假設i=1,那么該結(jié)點是二叉樹的根,無父結(jié)點。否那么,編號為[i/2]的結(jié)點為其父結(jié)點;,,② 假設2i>n,那么該結(jié)點無左孩子。否那么,編號為2i的結(jié)點為其左孩子結(jié)點;,,③ 假設2i+1>n,那么該結(jié)點無右孩子。否那么,編號為2i+1的結(jié)點為其右孩子結(jié)點。,,證明通過對i進行歸納即可得證。,,二叉樹的鏈式存儲,,結(jié)點定義:,,struct BinTreeNode {,,ElemType data;,,struct BinTreeNode *leftChild, *rightChild;,,};,,,,這里leftChild和rightChild分別為某一結(jié)點指向其左孩子和右孩子的指針。對于葉子結(jié)點或一個新生成的結(jié)點而言,其左孩子和右孩子指針都應為空值,。,,二叉樹的鏈式存儲,A,,,B,,,C,∧,∧,D,∧,∧,E,∧,∧,利用這種結(jié)點形式存儲的樹一般稱為二叉鏈表。,,從根結(jié)點出發(fā),可以訪問二叉樹的任何結(jié)點。為了能夠訪問二叉樹,必須保存指向根結(jié)點的指針。這和單鏈表必須保存頭指針的道理一樣。,,二叉樹的常用算法包括:獲取根結(jié)點指針、判斷樹是否為空、插入或刪除結(jié)點、插入或刪除子樹、二叉樹遍歷等。,,二叉樹類可描述如下:,,class BinTree {,,public:,,BinTreeNode *root; //定義根結(jié)點指針,,BinTree() { root=NULL; } //構(gòu)造函數(shù),定義空樹,,//判斷樹是否為空,,bool IsEmpty() { return root==NULL; },,//在葉子結(jié)點p下插入左子樹q,,void Ins_lchild(BinTreeNode *p,BinTreeNode *q) {,,p->leftChild=q;,,},,( 接下頁…… ),,( 接上頁 ),,//在葉子結(jié)點p下插入右子樹q,,void Ins_rchild(BinTreeNode *p,BinTreeNode *q) {,,p->rightChild=q;,,},,//刪除結(jié)點p的左子樹,,void Del_lchild(BinTreeNode *p) { p->leftChild=NULL; },,//刪除結(jié)點p的右子樹,,void Del_rchild(BinTreeNode *p) { p->rightChild=NULL; },,void PreOrder(BinTreeNode *t); //先序遍歷,,void InOrder(BinTreeNode *t); //中序遍歷,,void PostOrder(BinTreeNode *t); //后序遍歷,,};,,二叉樹的遍歷,,,二叉樹遍歷是只按照某種順序訪問二叉樹的每個結(jié)點,并且每個結(jié)點只被訪問一次。這是二叉樹中經(jīng)常用到的操作,有三種主要的遍歷算法——先序遍歷、中序遍歷和后序遍歷。,,,〔1〕先序遍歷,,對一顆非空二叉樹進行先序遍歷時,首先訪問根結(jié)點,然后按先序遍歷方式訪問左子樹,最后按先序遍歷方式訪問右子樹。先序遍歷算法如下:,,void BinTree::PreOrder(BinTreeNode *t),,{,,if (t),,{,,Visit( t ); //訪問根結(jié)點,,PreOrder( t->leftChild ); //遍歷左子樹,,PreOrder( t->rightChild ); //遍歷右子樹,,},,},,〔2〕中序遍歷,,對一顆非空二叉樹進行中序遍歷時,首先按中序遍歷方式訪問左子樹,然后訪問根結(jié)點,最后按中序遍歷方式訪問右子樹。中序遍歷算法如下:,,void BinTree::InOrder(BinTreeNode *t),,{,,if(t) {,,InOrder( t->leftChild ); // 遍歷左子樹,,Visit( t ); // 訪問根節(jié)點,,InOrder( t->rightChild ); // 遍歷右子樹,,},,},,〔3〕后序遍歷,,對一顆非空二叉樹進行中序遍歷時,首先按后序遍歷方式訪問左子樹,然后按后序遍歷方式訪問右子樹,最后訪問根結(jié)點。后序遍歷算法如下:,,void BinTree::PostOrder(BinTreeNode *t),,{,,if(t) {,,PostOrder( t->leftChild ); //遍歷左子樹,,PostOrder( t->rightChild ); //遍歷右子樹,,Visit( t ); //訪問根節(jié)點,,},,},,圖的根本概念,,,圖,的來,源,:,通信網(wǎng)、交通網(wǎng),等,,它表現(xiàn)了數(shù)據(jù)對象間多對多的聯(lián)系。在該結(jié)構(gòu)中,數(shù)據(jù)元素一般稱為頂點,。,,圖的定義:,,,圖是由頂點集合及頂點間的關系集合組成的一種數(shù)據(jù)結(jié)構(gòu)。一般記作Graph=( V, E )。其中V是頂點的有限非空集合;E是頂點之間關系的有限集合。,,以下是圖的相關術(shù)語,,? 邊:假設頂點x到y(tǒng)是的一條雙向通路,那么稱為邊,用(x,y)表示。,,? ?。杭僭O頂點x到y(tǒng)是的一條單向通路,那么稱為弧,用表示。,,? 鄰接點:如果(x,y)是圖中的一條邊,那么稱x與y互為鄰接點;如果是圖中的一條弧,那么稱y為x的鄰接點。,,? 頂點的度:一個頂點v的度是與它相關聯(lián)的邊的條數(shù)。,,? 無向圖:假設圖是由一些頂點和邊構(gòu)成那么稱之為無向圖。,,? 有向圖:假設圖是由一些頂點和弧構(gòu)成那么稱之為有向圖。,,? 權(quán):某些圖的邊或弧具有與它相關的數(shù),稱之為權(quán)。這種帶權(quán)圖叫做網(wǎng)絡。,,0,,1,,3,,2,5,2,8,1,3,,,,,,0,1,2,3,4,,1,,0,,2,,3,,4,(a)無向圖 (b)有向圖 (c)網(wǎng)絡,,,? 路徑:在圖中,假設從頂點vi出發(fā),沿一些邊或弧,經(jīng)過頂點vp1,vp2,…,vpm,到達頂點vj。那么稱頂點序列( vi,vp1,vp2,…,vpm,vj )為從頂點vi到頂點vj的路徑。假設路徑上各頂點均不互相重復,那么稱這樣的路徑為簡單路徑。,,? 路徑長度:非帶權(quán)圖的路徑長度是指此路徑上邊或弧的條數(shù),帶權(quán)圖的路徑長度是指路徑上各邊或弧的權(quán)之和。,,? 子圖:設有兩個圖G=(V,E)和G′=(V′,E′)。假設V包含V′且E包含E′,那么稱圖G′是圖G的子圖。,,? 連通圖:在無向圖中,假設從頂點vi到頂點vj有路徑,那么稱頂點vi與vj是連通的。如果圖中任意一對頂點都是連通的,那么稱此圖是連通圖。,,? 強連通圖:在有向圖中,假設對于每一對頂點vi和vj,都存在從vi到vj和從vj到vi的路徑,那么稱此圖是強連通圖。,,?,生成樹,:一個連通圖的生成樹是它的極小連通子圖。即包含了所有頂點以及最少的邊或弧的子圖,并且這些邊或弧使得任意兩頂點相互連通。在含有n個頂點的無向圖中,生成樹一定有n-1條邊,且生成樹的形式可能有多個。,,,圖的存儲方式,,1.鄰接矩陣,,利用數(shù)組實現(xiàn)的。它利用一維數(shù)組存儲頂點信息,利用二維數(shù)組存儲頂點間邊或弧的信息。此二維數(shù)組又稱鄰接矩陣。,,,鄰接矩陣 存儲方式可用于無向圖或有向圖。無向圖的鄰接矩陣是對稱的,有向圖的鄰接矩陣可能是不對稱的。,,圖的鄰接矩陣存儲可以用下面的結(jié)構(gòu)體表示:,,#define MAX_NUM 100 // 最大頂點個數(shù),,typedef struct {,,VertexType vexs[MAX_NUM]; //頂點信息數(shù)組,,ArcType Matrix[MAX_NUM][MAX_NUM]; //鄰接矩陣,,int vexnum,arcnum; //圖的實際頂點數(shù)和弧(邊)數(shù),,int kind; //圖的種類標志, 1—有向圖, //2—有向網(wǎng),3—無向圖,4—無向網(wǎng),,} MGraph;,,其中ArcType是頂點關系的數(shù)據(jù)類型。VertexType是頂點的數(shù)據(jù)類型。MAX_NUM表示最多可存的頂點數(shù)。,,,假設無向圖G=(V,E)是一個有n個頂點的圖,那么圖的鄰接矩陣A是n階方陣,其內(nèi)容如下:,其中W(i, j)是與邊或弧相關的權(quán)。,,,對于含權(quán)的網(wǎng)絡而言,其鄰接矩陣可定義如下:,,,0,,1,,3,,2,5,2,8,1,3,,,,,,0,1,2,3,4,,1,,0,,2,,3,,4,(a)無向圖 (b)有向圖 (c)網(wǎng)絡,,,,0,,1,,3,2,,4,,,0,,1,,3,2,,4,,0,,1,,2,,3,,4,,0,,1,,2,,3,,4,,0,,1,,2,,3,,,0,,1,,3,2,(a)無向圖鄰接矩陣 (b)有向圖鄰接矩陣 (c)網(wǎng)絡鄰接矩陣,,,2.鄰接表,,鄰接表存儲形式是一種鏈表與數(shù)組結(jié)合的存儲形式。在鄰接表中有兩種結(jié)點,一種是頭結(jié)點,另一種是表結(jié)點。,,〔1〕頭結(jié)點都存儲一個頂點的詳細信息,為了便于管理,所有頭結(jié)點都存放在一個數(shù)組中。,,〔2〕對于某個頂點而言,需要將所有與它鄰接的頂點存儲為表結(jié)點形式,并將它們鏈接成單鏈表,這個單鏈表就稱為該頂點的鄰接表。,,〔3〕還要在每個頂點的頭結(jié)點中存儲指向其鄰接表首元結(jié)點的指針。,,,,鄰接表的結(jié)點結(jié)構(gòu),(c)網(wǎng)絡的表結(jié)點,info,next,adjvex,next,adjvex,first,data,(,a)頭結(jié)點,(b)無權(quán)圖的表結(jié)點,,,,圖的鄰接表描述,,#define MAX_NUM 100 //頂點最大允許數(shù)量,,struct AdjNode { //表結(jié)點類型定義,,int adjvex; //該鄰接點在數(shù)組中的位置,,InfoType info; //該弧相關信息,,struct AdjNode *next; //指向下一鄰接點的指針,,};,,typedef struct VNode { //頭結(jié)點類型定義,,VertexType data; //頂點信息,,AdjNode *first; //指向鄰接表第一個結(jié)點,,} AdjList[MAX_NUM];,,typedef struct {,,AdjList headArray; //頭結(jié)點數(shù)組,,int vexnum, arcnum; //圖的當前頂點數(shù)和弧數(shù),,int kind; //圖的種類標志,,} ALGraph;,,,其中AdjNode為表結(jié)點,InfoType為與邊相關信息的數(shù)據(jù)類型〔可以包括權(quán)等〕。VNode為頭結(jié)點,VertexType是頂點的數(shù)據(jù)類型,MAX_NUM表示最多可以存放的頂點個數(shù)。,,圖的遍歷方法,,1.深度優(yōu)先搜索,,假定從圖中某個頂點v 出發(fā)進行遍歷,那么首先訪問此頂點,然后依次從v的各個未被訪問的鄰接點出發(fā),執(zhí)行深度優(yōu)先搜索遍歷,直至圖中所有和v有路徑相通的頂點都被訪問到,假設此時圖中尚有頂點未被訪問,那么另選圖中一個未曾被訪問的頂點作起始點,重復上述過程,直至圖中所有頂點都被訪問到為止。,,用非遞歸的方式描述如下:首先訪問圖中某一起始頂點v0,由v0出發(fā),訪問它的任一鄰接點vi;再從vi出發(fā),訪問與vi鄰接但還沒有訪問過的頂點vj;如此進行下去,直至到達某一頂點vt后,發(fā)現(xiàn)vt所有的鄰接頂點都被訪問過。于是從vt退到前一次剛訪問過的頂點vs,看看vs是否還有其他沒有被訪問的鄰接頂點。如果有那么訪問此頂點,之后再從此頂點出發(fā),進行與前述類似的訪問;如果沒有,就再退回一步進行搜索。重復上述過程,直到連通圖中所有頂點都被訪問過為止。,,,bool visited[MAX]; //頂點訪問標志數(shù)組,,//從第v個頂點出發(fā)遞歸地深度優(yōu)先遍歷圖G的,,//某個連通子圖,,void DFS(ALGraph G, int v),,{,,AdjNode *p;,,visited[v] = TRUE;,,cout<<v<<〞被訪問 〞; // 訪問第v個頂點,,// 對v的尚未訪問的鄰接頂點w遞歸調(diào)用DFS,,for(p=G.headArray[v].first; p!=NULL; p=p->next ),,if(!visited[p->adjvex]) DFS(G,p->adjvex);,,},,2.廣度優(yōu)先搜索,,假定從圖中某個頂點v 出發(fā)進行遍歷,那么首先訪問此頂點,再依次訪問v的所有未被訪問過的鄰接點,然后按這些頂點被訪問的先后次序依次訪問它們的鄰接點,直至圖中所有和v有路徑相通的頂點都被訪問到。假設此時圖中尚有頂點未被訪問,那么另選圖中一個未曾被訪問的頂點作起始點,重復上述過程,直至圖中所有頂點都被訪問到為止。,,以圖(a)為例,假設從A出發(fā)進行廣度優(yōu)先搜索,首先訪問A,然后依次訪問A的各個未被訪問過的鄰接頂點B、E、D,再分別從B、E、D出發(fā),訪問它們的所有還未被訪問過的鄰接頂點C、F、G。,,,為了實現(xiàn)逐層訪問,廣度優(yōu)先搜索算法中使用了一個隊列,以記憶正在訪問的這一層和上一層的頂點,以便于向下一層訪問,。,,A B E D C F G,,,哈夫曼樹和哈夫曼編碼,,設計二進制編碼方案時要考慮不同字符的使用頻率,使用頻率高的字符編碼應當盡量短一些。但是僅僅考慮使用頻率也是不夠的。,,例如:某個文件由A、B、C、D四個字符組成,其中A用得最多,C次之。,,方案1: A — 1 C — 0 B — 10 D — 11,,那么象1100這樣的二進制數(shù)據(jù)具有二義性,既代表AACC,又可代表ABC,還可代表DCC。,,為了不使二進制編碼具有二義性,每個字符編碼都不能與其他字符編碼的前面假設干位重合。,,B,D,,C,A,,0,0,1,1,A,B,0,1,D,,C,0,0,1,1,,(a)有二義性的編碼系統(tǒng)對應的二叉樹 (b)無二義性的編碼系統(tǒng)對應的二叉樹,,任何一個無二義性的二進制字符編碼系統(tǒng)必然與這樣一顆二叉樹對應,該二叉樹的葉子結(jié)點對應著所有需要轉(zhuǎn)換的字符,并且按照左分支代表0、右分支代表1的規(guī)那么,從根到該葉子的分支對應的0、1序列就構(gòu)成葉子對應字符的二進制編碼。,可以利用二叉樹分析字符編碼問題。假設二叉樹中的左分支代表0,右分支代表1,那么不管字符是采用何種0、1組合形式構(gòu)成的編碼,它必然對應某個二叉樹中一個結(jié)點。,,1〕假設每個字符使用頻率是相等的,那么不同字符的編碼長度之和就可衡量編碼系統(tǒng)的優(yōu)劣。而某個字符編碼的長度就是對應的二叉樹中根到某個葉子的分支的數(shù)目〔又稱為根到葉子的路徑長度〕。,,,2〕如果每個字符使用頻率不相等,那么將不同字符的編碼長度乘上其使用權(quán)值再加起來,也可衡量編碼系統(tǒng)的優(yōu)劣。也就是用根到每個葉子的路徑長度乘以葉子對應字符的使用權(quán)值再加起來作為衡量標準,顯然這種加權(quán)和除以字符總數(shù)就是每個字符的加權(quán)平均編碼長度。,,二叉樹帶權(quán)路徑長度,:設二叉樹有n個帶有權(quán)值的葉子結(jié)點,每個葉子到根的路徑長度乘以其權(quán)值之和稱為二叉樹帶權(quán)路徑長度。一般記作:,,,,,其中,,w,i,為第,i,個葉子的權(quán)重,,l,i,為第,i,個葉子到根的路徑長度。,,哈夫曼樹,:以一些帶有固定權(quán)值的結(jié)點作為葉子所構(gòu)造的,具有,最小,帶權(quán)路徑長度的二叉樹稱為哈夫曼樹,。,,假定有n個具有權(quán)值的結(jié)點,那么哈夫曼樹的構(gòu)造算法如下:,,①根據(jù)給定的n個權(quán)值{w1, w2, …, wn},構(gòu)造n棵二叉樹的集合F={T1, T2, …, Tn},其中每棵二叉樹中均只含一個帶權(quán)值為wi的根結(jié)點,其左、右子樹為空樹;,,②在F中選取其根結(jié)點的權(quán)值為最小的兩棵二叉樹,分別作為左、右子樹構(gòu)造一棵新的二叉樹,并置這棵新的二叉樹根結(jié)點的權(quán)值為其左、右子樹根結(jié)點的權(quán)值之和;,,③從F中刪去這兩棵樹,同時參加剛生成的新樹;,,④重復⑵和⑶兩步,直至F中只含一棵樹為止。,,假定有一段報文由a、b、c、d四個字符構(gòu)成,它們的使用頻率比為6﹕4﹕2﹕1,那么用a、b、c、d作為葉子結(jié)點構(gòu)造哈夫曼樹的過程如下圖。,假設二叉樹中的左分支代表0,右分支代表1,那么a、b、c、d的哈夫曼編碼分別為0、10、110、111。,,【,例2-5,】,假定編碼系統(tǒng)中有五個字符X、S、D、E、A,它們的使用頻率比為2﹕9﹕5﹕7﹕8,以這些頻率值作葉子的權(quán)構(gòu)造哈夫曼樹,并輸出哈夫曼編碼。,,,最小生成樹,,考慮一個通信網(wǎng)的建設問題。假定在多個城市間建立通信網(wǎng)絡,將城市作為頂點,將所有可能的通信線路作為邊,就構(gòu)成一個圖結(jié)構(gòu)。再以通信線路的造價作為邊的權(quán)重就構(gòu)成一個無向網(wǎng)絡。在保證通信功能的前提下,為了使總造價最小,需要尋找網(wǎng)絡中權(quán)重之和最小的連通子圖,。,,,〔1〕普里姆算法,,假定G={ V, E }為連通網(wǎng)絡,其中V為頂點集合,E為帶權(quán)邊集合。設置生成樹頂點集合U,最初它只包含某一個頂點。設置生成樹邊集合T,最初為空集。而后考察這樣的邊,它的一個頂點u∈U,另一個頂點v∈V-U,每次從所有這樣的邊中選擇權(quán)值最小的邊(u, v)參加集合T,并把頂點v參加到集合U中。如此不斷重復,直到所有頂點都參加到集合U中為止。,,,,〔2〕克魯斯卡爾算法,,假定G={ V, E }為連通網(wǎng)絡,其中V為頂點集合,E為帶權(quán)邊集合。先構(gòu)造一個包含所有頂點,沒有邊的非連通圖T={ V, {} },圖中每個頂點自成一個連通分量。當在E中選到一條具有最小權(quán)值的邊時,假設該邊的兩個頂點落在T的不同的連通分量上,那么將此邊參加到T中;否那么將此邊舍去,重新選擇一條權(quán)值最小的邊。如此重復下去,直到所有頂點在同一個連通分量上為止。,,,K)N@3>7^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF%I(M=27^blfpisQwUAYE!H*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyVBZF%J)N@26:akeoisPvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhqOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmfpjtRxVBZE$I(M=27^bkeoisQwUAXD!H*L+1~4.8
cmgqjtRxVBZF%I(M=27^blfoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J)M=27^blfpjsQwUAYE$I*L+1~5;9
cmgqOuSyVBZF%J)N=27^bleoisQwUAYD!H*L+1~5.8
cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)N=27^blfpjtQwUAYE$I(L+1~5;9 cmgqOuSyWBZF%J)N@26:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVBYE$I(M=2~5;9 dnhrOuSyWC#G%J)N@3>7^akeoisQwUzXD!H*L+0`4.8
cmgpjtRxVBZE$I(M=27^bleoisQwUAXD!H*L+1~4.8
cmgqOtRxVBZF%I(M=27^blfpisQwUAYE!H*L+1~5;8
cmgqOuRxVBSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyVBZF%J)N@26:akeoisPvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhqOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmfpjtRxVBZE$I(M=27^bkeoisQwUAXD!H*L+1~4.8
cmgqjtRx$I*L+1~5;9
cmgqOuSyVBZF%J)N@27^blfpjsQw0`4.8^blfpjtRxUA%I(M=27^blfoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J)M=27^blfpjsQwUAYE$I*L+1~5;9
chnhrOuSyWC#G&J)N@3>7^akeoisQwUzXD!H*L+1`4.8
cmgpjtRxVBZF$I(M=27^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)N=27^blfpjtQwUAYE$I(L+1~5;9 cmgqOuSyWBZF%J)N@27^blfoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J(M=27^blfpjsQwUAYE$H*L+1~5;9
cmgqOuSyVBZF%J)N=27^bleoisQwUAXD!H*L+1~4.8
cmgqOuSxVBZF%J)M=27^bkeoisQwUzXD!H*L+1`4.8
cmgqjtRxVBZF$I(M=26:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=M=2~5;9 dnhrOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmgpjtRxVBZE$I(M=27^bleoisQwUAXD!H*L+1~4.8
cmgqjtRxVBZF%I(M=27^blfoisQwUAYE!H*L+1~5;8
cmOuSyWC#F%J)N@3>7:akeoisQvTzXD!H*L-0`4.8
cmfpjtRxVBYE$I(M=27^bkeoisQwUzXD!H*L+1`4.8
cmgpjtRxVBZF$I(M=27^bleoisQwUAYD!H*L+1~5.8
cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)N=27^blfpjtQwUAYE$I(L+1~5;9 cmgqOuSyWBZF%J)N@26:aoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J(M=27^blfpjsQwUAYE$H*L+1~5;9
cmgqOuSyVBZF%J)N=27:akeoisQvTzXD!H*L-0`4.8
cmfpjtRxVBYE$I(M=27^bkeoisQwUzXD!H*L+1`4.8
cmgpjtRxVBZF$I(M=27^bleoisQwUAYD!HM+1~5;9 dngqOuSyWCZF%J)N@3>6:akeoisPvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhqOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmfpjtRxVBZE$I(M=27^bkeoisQwUAXD!H*L+1~4.8
cmgqjtRxVBZF%I(M=27^blfoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J)M=27^blfpjsQwUAYI(M=2~5;9 dnhrOuSyWC#G&J)N@3>7^akeoisQwUzXD!H*L+0`4.8
cmgpjtRxVBZF$I(M=27^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF%I(M=27^blfpisQwUAYE!H*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyVBZF%J)N@27^blfoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J)M=27^blfpjsQwUAYE$I*L+1~5;9
cmgqOuSyVBZF%J)N=27^bleoisQwUAYD!H*L+1~4.8
cmgqOWC#G&K-N@3>7^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpisQwUAYE$H*L+1~5;9
cmgqOuSxVBZF%J)N=26:akeoisQvTzXD!H*L-5;8
cmgqOuRxVBZF%J)M=27^blfpjsQwUAYE$I*L+1~5;9
cmgqOuSyVBZF%J)N@27:akeoisQwTzXD!*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyWBZF%J)N@26:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhrOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmgpj3>7^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF%I(M=27^blfpisQwUAYE!H*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyVBZF%J)N@26:akeoisPvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhqOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmfpjtRxVBZE$I(M=27^bkeoisQwUAXD!L+1~5;9 cmgqOuSyWBZF%J)N@36:akeoisQvTzXD!H*L-0`4.8
clfpjtRxVBYE$I(M=2~5;9 dnhrOuSyWC#G&J)N@3>7^akeoisQwUzXD!H*L+0`4.8
cmgOuSyVBZF%J)N=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyWBZF%J)N@26:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVpjsQwUAYE$H*L+1~5;dnhrOuSyWC#G%J)N@3>7^akeoisQwUzXD!H*L+0`4.8
cmgpjtRxVBZE$I(M=27^bleoisQwUAXD!H*L+1~4.8
cmgqOtRxVBZF%I(M=27^blfpisQwUAYE!H*L+1~5;8
cmgqOSyWC#F%J)N@3>7:akeoisQwTzXD!H*L-0`4.8
cmfpjtRxVBYE$I(M=27^bleoisQwUAYD!H*L+1~5.8
cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)N=27^blfpjtQBZE$I(M=27^bkeoisQwUAXD!H*L+1`4.8
cmgqjtRxVBZF%I(M=27^blfoisQwUAYE!H*L+1~5.8
cmgqOuRxVBZF%J(M=2qjtRxVBZF%I(M=27^blfoisQwUAYE!H*L+1~5;8
cmgqOuRxVBZF%J)M=27^blfpisQwUAYE!H*L+1~5;8
cmOuSyWC#F%J)N@3>7:akeoisQwTzXD!H*L-0`4.8
cmfpjtRxVBYE$I(M=27^bkeoOuSxVBZF%J)N=26:akeois%J)N@3uSyWC#G&J)N@3>7^akeoisQwUzXD!H*L+0`4.8
cmgpjtRxVBZF$I(M=27^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF%I(M=27^blfpisQwUAYE!H*L+1~9 dnhqOuSyWC#G%J)N@3>7:akeoisQwTzXD!H*L-0`4.8
cmfpjtRxVBZE$I(M=27^bkeoisQwUAXD!H*L+1`4.8
cmgqjtRxVBZF$I(M=27^blfoisQwUAYD!H*+1~5;9 dngqOuSyWCZF%J)N@3>6:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhrOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmgpjtRxVB%J)N=27:akeoisQvTzXD!H*L-0`4.8
clfpjtRxVBYE$)M=27^blfpjsQwUAYE$I*L+1~5;9 cmgqOuSyVBZF%J)N@27^blfpjtQwUAYE$I*L+1~5 dnhrPuSyWC#G&J)N@3>7^bkeoisQwUAXD!H*L+1`4.8
cmgqjtRxVBZF$I(M=27^blfoisQwUAYD!H*L+1~5.8
cmgqOuRxVBZF)N@3>6:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVAYE$I(M=2~5;9 dnhrOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmgpjSxVBZF%J)N=27^bleoisQwUAXD!H*L+1~4.8
cmgqO27^blfpjsQwUAYE$I*L7^akeoisQwUzXD!H*L+1`4.8
cmgpjtRxVBZF$I(M=27^bleoisQwUAYD!H*L+1~4.8
cmgqOtRxVBZF)N@3>6:akeoisPvTzXD!H*K-0`4.8
blfpjtRxVAYE.8^blfpjtRwUAYE$I(M+1~5;9 dngqOuSyWCZF%J)N@3>6:akeoisPvTzXD!H*K-0`4.8cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;9
cmgqOuSxVBZF%J)N=27:akeoisQvTzXD!H*L-0`4.8
clfpjtRxVBYE$I(M=27^akeoisQwUzXD!H+1~5;9
cmgqOuSyVBZF%J)N@27^bleoisQwUAYD!H*L+1~5.8
cmgqOtRxVBZF%J(M=27^blfpisQwUAYE$H*L+1~5;8
cmgqOuSxVBZF%J)N=2XD!G9 dngqOuSyWC#F%J)N@3>6:akeoisQvTzXD!H*K-0`4.8
clfpjtRxVBYE$I(M=2~5;9 dnhrOuSyWC#G%J)N@3>7^akeoisQwUz$H*L+1~5;9
cmgqOuSyVBZF%J)N=27^blfpisQwUAYE!H*L+1~5;8
cmgqOuSxVBZF%J)M=27^blfpjtQwUAYE$I*L+1~5;9 cmgqOuSyVBZF%J)N@27^blfoisQwUAYD!H*L+1~5.8
cmgqOtRxVBZF%J(M=27^blfpisQwUA$I(M=2~5;9 dnhqOuSyWC#G%J)N@3>7^akeoisQwTzXD!H*L+0`4.8
cmfpjtRxVBZE$I(M=27^bkeoisQwUAXD!H*L+1~4.8
cmgqjtRxVBZF%I(M=27:,,