下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)原理:Kruskal 算法是一種按照?qǐng)D中邊的權(quán)值遞增的順序構(gòu)造最小生成樹的方法。其基本思想是:設(shè)無向連通網(wǎng)為G(V,E),令G 的最小生成樹為T,其初態(tài)為T(V,),即開始時(shí),最小生成樹T 由圖G 中的n 個(gè)頂點(diǎn)構(gòu)成,頂點(diǎn)之間沒有一條邊,這樣T 中各頂點(diǎn)各自構(gòu)成一個(gè)連通分量。然后,按照邊的權(quán)值由小到大的順序,考察G 的邊集E 中的各條邊。若被考察的邊的兩個(gè)頂點(diǎn)屬于T 的兩個(gè)不同的連通分量,則將此邊作為最小生成樹的邊加入到T 中,同時(shí)把兩個(gè)連通分量連接為一個(gè)連通分量;若被考察邊的兩個(gè)頂點(diǎn)屬于同一個(gè)連通分量,則舍去此邊,以免造成回路,如此下去,當(dāng)T 中的連通分量個(gè)數(shù)為1 時(shí),此連
2、通分量便為G 的一棵最小生成樹。如教材153頁的圖4.21(a)所示,按照Kruskal 方法構(gòu)造最小生成樹的過程如圖4.21 所示。在構(gòu)造過程中,按照網(wǎng)中邊的權(quán)值由小到大的順序,不斷選取當(dāng)前未被選取的邊集中權(quán)值最小的邊。依據(jù)生成樹的概念,n 個(gè)結(jié)點(diǎn)的生成樹,有n1 條邊,故反復(fù)上述過程,直到選取了n1 條邊為止,就構(gòu)成了一棵最小生成樹。實(shí)驗(yàn)?zāi)康模罕緦?shí)驗(yàn)通過實(shí)現(xiàn)最小生成樹的算法,使學(xué)生理解圖的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)表示,并能理解最小生成樹Kruskal 算法。通過練習(xí),加強(qiáng)對(duì)算法的理解,提高編程能力。實(shí)驗(yàn)內(nèi)容:(1)假定每對(duì)頂點(diǎn)表示圖的一條邊,每條邊對(duì)應(yīng)一個(gè)權(quán)值;(2)輸入每條邊的頂點(diǎn)和權(quán)值;(3)輸入
3、每條邊后,計(jì)算出最小生成樹;(4)打印最小生成樹邊的頂點(diǎn)及權(quán)值。實(shí)驗(yàn)器材(設(shè)備、元器件):PC機(jī)一臺(tái),裝有C語言集成開發(fā)環(huán)境。數(shù)據(jù)結(jié)構(gòu)與程序:#include #include #include using namespace std;#define X 105typedef struct Edgeint w;int x, y; Edge;/儲(chǔ)存邊的struct,并儲(chǔ)存邊兩端的結(jié)點(diǎn)class GraphNodepublic:int data;int father;int child; GraphNodeX;/儲(chǔ)存點(diǎn)信息的并查集類(點(diǎn)的值,父結(jié)點(diǎn),子結(jié)點(diǎn))Edge edgeX*X;bool co
4、mp(const Edge, const Edge);void update(int);int main()int node_num;int sum_weight = 0;FILE *in = fopen(C:Users瑞奇Desktop編程實(shí)驗(yàn)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)FileTempin.txt, r);cout Reading data from file. endl endl;/cout node_num;fscanf(in, %d, &node_num);/cout Please input the data of each node: endl;for(int i = 1;i GraphNode
5、i.data;fscanf(in, %d, &GraphNodei.data);GraphNodei.father = GraphNodei.child = i;/初始化點(diǎn)集/cout Please input the relation between nodes in this format and end with (0 0 0): endl (first_node second_node egde_weight) x y w & w)while(fscanf(in, %d%d%d, &x, &y, &w) != EOF & w)edgetmp_cnt.w = w, edgetmp_cnt
6、.x = x, edgetmp_cnt+.y = y;fclose(in);sort(edge+1, edge+tmp_cnt, comp);/對(duì)邊權(quán)進(jìn)行排序cout The MinSpanTree contains following edges: endl endl;for(int i = 1;i = tmp_cnt;i+)/循環(huán)找最小邊if(GraphNodeedgei.x.father != GraphNodeedgei.y.father)int n = edgei.x;int m = n;if(GraphNodem.father != m)/使用并查集對(duì)邊是否可用進(jìn)行判斷m = Gr
7、aphNodem.father;GraphNodem.father = GraphNodeedgei.y.father;GraphNodeedgei.x.father = GraphNodeedgei.y.father;GraphNodeedgei.y.child = GraphNodeedgei.x.child;while(GraphNoden.child != n)n = GraphNoden.child;update(n);/在合并點(diǎn)集后對(duì)并查集進(jìn)行更新sum_weight += edgei.w;/計(jì)算總權(quán)cout t The edge between GraphNodeedgei.x.
8、data & GraphNodeedgei.y.data with the weight edgei.w endl;cout endl And the total weight of the MinSpanTree add up to: sum_weight endl;return 0;bool comp(const Edge a, const Edge b)return a.w b.w;void update(int n)if(GraphNoden.father = n)return;GraphNodeGraphNoden.father.child = GraphNoden.child;/更
9、新孩子結(jié)點(diǎn)update(GraphNoden.father);/遞歸更新GraphNoden.father = GraphNodeGraphNoden.father.father;/更新父結(jié)點(diǎn)程序運(yùn)行結(jié)果:運(yùn)行程序,程序讀取文件,獲取文件中關(guān)于圖的信息:結(jié)點(diǎn)數(shù),結(jié)點(diǎn)值,結(jié)點(diǎn)間邊權(quán)。然后使用Kruskal算法對(duì)錄入信息進(jìn)行處理:1. 對(duì)邊權(quán)排序2. 取最小權(quán)邊,若邊的端結(jié)點(diǎn)不在同一集合眾,則使邊的端結(jié)點(diǎn)加入集合并刪除該邊;若邊的端結(jié)點(diǎn)本來就在同一集合中,直接刪除該邊3. 循環(huán)執(zhí)行步驟2,直到集合中包含所有結(jié)點(diǎn)和結(jié)點(diǎn)數(shù)-1條邊輸入為:61 2 3 4 5 61 2 61 3 11 4 52 3 52 5 33 4 53 5 63 6 44 6 25 6 6程序運(yùn)行結(jié)果如下圖:實(shí)驗(yàn)結(jié)論:Kruskal算法其實(shí)是一種貪心
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 康復(fù)醫(yī)學(xué)發(fā)展與臨床應(yīng)用
- 醫(yī)院臨床醫(yī)生心理溝通禮儀
- 2026年??诮?jīng)濟(jì)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試模擬試題帶答案解析
- 2026年安徽綠海商務(wù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試模擬試題帶答案解析
- 2026年廣西機(jī)電職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試參考題庫帶答案解析
- 2026年漳州理工職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試模擬試題附答案詳解
- 護(hù)理專業(yè)英語教學(xué)策略與效果評(píng)價(jià)
- 中醫(yī)科診療技術(shù)與臨床應(yīng)用總結(jié)
- 2026年黑龍江民族職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試參考題庫帶答案解析
- ??谱o(hù)理技能提升與標(biāo)準(zhǔn)化
- 原油儲(chǔ)存建設(shè)項(xiàng)目可行性研究報(bào)告
- 遼寧衛(wèi)視小品趙本山小品《相親2》臺(tái)詞版
- 畢業(yè)生離校聚會(huì)安全應(yīng)急預(yù)案
- 統(tǒng)編版2024-2025學(xué)年三年級(jí)上冊(cè)語文期末情景檢測(cè)試卷(含答案)
- 醫(yī)療機(jī)構(gòu)衛(wèi)生計(jì)生監(jiān)督協(xié)管巡查記錄
- JJF 2118-2024壓力式六氟化硫氣體密度控制器校驗(yàn)儀校準(zhǔn)規(guī)范
- 代辦退休授權(quán)委托書模板
- (正式版)JBT 9634-2024 汽輪機(jī)冷油器(管式)尺寸系列和技術(shù)規(guī)范
- (高清版)DZT 0309-2017 地質(zhì)環(huán)境監(jiān)測(cè)標(biāo)志
- 地基驗(yàn)槽(擋土墻)
- 2014FSC懸架答辯報(bào)告-太原理工
評(píng)論
0/150
提交評(píng)論