![離散數(shù)學(xué)-最小生成樹實(shí)驗(yàn)報(bào)告_第1頁](http://file4.renrendoc.com/view/e1e58bfb9aaa7a75e14255f9f460c5c4/e1e58bfb9aaa7a75e14255f9f460c5c41.gif)
![離散數(shù)學(xué)-最小生成樹實(shí)驗(yàn)報(bào)告_第2頁](http://file4.renrendoc.com/view/e1e58bfb9aaa7a75e14255f9f460c5c4/e1e58bfb9aaa7a75e14255f9f460c5c42.gif)
![離散數(shù)學(xué)-最小生成樹實(shí)驗(yàn)報(bào)告_第3頁](http://file4.renrendoc.com/view/e1e58bfb9aaa7a75e14255f9f460c5c4/e1e58bfb9aaa7a75e14255f9f460c5c43.gif)
![離散數(shù)學(xué)-最小生成樹實(shí)驗(yàn)報(bào)告_第4頁](http://file4.renrendoc.com/view/e1e58bfb9aaa7a75e14255f9f460c5c4/e1e58bfb9aaa7a75e14255f9f460c5c44.gif)
![離散數(shù)學(xué)-最小生成樹實(shí)驗(yàn)報(bào)告_第5頁](http://file4.renrendoc.com/view/e1e58bfb9aaa7a75e14255f9f460c5c4/e1e58bfb9aaa7a75e14255f9f460c5c45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
/實(shí)驗(yàn)?zāi)康模赫莆請D的存儲(chǔ)表示和以及圖的最小生成樹算法。二、實(shí)驗(yàn)內(nèi)容:實(shí)現(xiàn)圖的存儲(chǔ).并且讀入圖的內(nèi)容。利用克魯斯卡爾算法求網(wǎng)絡(luò)的最小生成樹。實(shí)現(xiàn)構(gòu)造生成樹過程中的連通分量抽象數(shù)據(jù)類型。以文本形式輸出對應(yīng)圖的最小生成樹各條邊及權(quán)值。三、實(shí)驗(yàn)要求:在上機(jī)前寫出全部源程序;能在機(jī)器上正確運(yùn)行程序;用戶界面友好。需求分析:1、利用克魯斯卡爾算法求網(wǎng)的最小生成樹;2、以用戶指定的結(jié)點(diǎn)為起點(diǎn),分別輸出每種遍歷下的結(jié)點(diǎn)訪問序列;3、輸入為存在邊的頂點(diǎn)對.以及它們之間的權(quán)值;輸出為所得到的鄰接矩陣以及按權(quán)排序后的邊和最后得到的最小生成樹;克魯斯卡爾算法:假設(shè)WN=<V,{E}>是一個(gè)含有n個(gè)頂點(diǎn)的連通網(wǎng).按照構(gòu)造最小生成樹的過程為:先構(gòu)造一個(gè)只含n個(gè)頂點(diǎn).而邊集為空的子圖.之后.從網(wǎng)的邊集E中選取一條權(quán)值最小的邊.若該條邊的兩個(gè)頂點(diǎn)分屬不同的樹.則將其加入子圖.反之.若該條邊的兩個(gè)頂點(diǎn)已落在同一棵樹上.則不可取.而應(yīng)該取下一條權(quán)值最小的邊再試之。依次類推.直至只有一棵樹.也即子圖中含有n-1條邊為止。測試數(shù)據(jù):自行指定圖進(jìn)行運(yùn)算四、詳細(xì)設(shè)計(jì)源程序#include<stdio.h>#include<stdlib.h>#defineM20#defineMAX20typedefstruct{intbegin;intend;intweight;}edge;typedefstruct{intadj;intweight;}AdjMatrix[MAX][MAX];typedefstruct{AdjMatrixarc;intvexnum,arcnum;}MGraph;voidCreatGraph<MGraph*>;voidsort<edge*,MGraph*>;voidMiniSpanTree<MGraph*>;intFind<int*,int>;voidSwapn<edge*,int,int>;voidCreatGraph<MGraph*G>{inti,j,n,m;printf<"請輸入邊數(shù)和頂點(diǎn)數(shù):">;scanf<"%d%d",&G->arcnum,&G->vexnum>;for<i=1;i<=G->vexnum;i++>{for<j=1;j<=G->vexnum;j++>{G->arc[i][j].adj=G->arc[j][i].adj=0;}}for<i=1;i<=G->arcnum;i++>{printf<"\n請輸入有邊的2個(gè)頂點(diǎn)">;scanf<"%d%d",&n,&m>;while<n<0||n>G->vexnum||m<0||n>G->vexnum>{printf<"輸入的數(shù)字不符合要求請重新輸入:">;scanf<"%d%d",&n,&m>;}G->arc[n][m].adj=G->arc[m][n].adj=1;getchar<>;printf<"\n請輸入%d與%d之間的權(quán)值:",n,m>;scanf<"%d",&G->arc[n][m].weight>;}printf<"鄰接矩陣為:\n">;for<i=1;i<=G->vexnum;i++>{for<j=1;j<=G->vexnum;j++>{printf<"%d",G->arc[i][j].adj>;}printf<"\n">;}}voidsort<edgeedges[],MGraph*G>{inti,j;for<i=1;i<G->arcnum;i++>{for<j=i+1;j<=G->arcnum;j++>{if<edges[i].weight>edges[j].weight>{Swapn<edges,i,j>;}}}printf<"權(quán)排序之后的為:\n">;for<i=1;i<G->arcnum;i++>{printf<"<<%d,%d>>%d\n",edges[i].begin,edges[i].end,edges[i].weight>;}}voidSwapn<edge*edges,inti,intj>{inttemp;temp=edges[i].begin;edges[i].begin=edges[j].begin;edges[j].begin=temp;temp=edges[i].end;edges[i].end=edges[j].end;edges[j].end=temp;temp=edges[i].weight;edges[i].weight=edges[j].weight;edges[j].weight=temp;}voidMiniSpanTree<MGraph*G>{inti,j,n,m;intk=1;intparent[M];edgeedges[M];for<i=1;i<G->vexnum;i++>{for<j=i+1;j<=G->vexnum;j++>{if<G->arc[i][j].adj==1>{edges[k].begin=i;edges[k].end=j;edges[k].weight=G->arc[i][j].weight;k++;}}}sort<edges,G>;for<i=1;i<=G->arcnum;i++>{parent[i]=0;}printf<"最小生成樹為:\n">;for<i=1;i<=G->arcnum;i++>{n=Find<parent,edges[i].begin>;m=Find<parent,edges[i].end>;if<n!=m>{parent[n]=m;printf<"<<%d,%d>>%d\n",edges[i].begin,edges[i].end,edges[i].weight>;}}}intFind<int*parent,intf>{while<parent[f]>0>{f=parent[f];}returnf;}intmain<void>{MGraph*G;G=<MGraph*>malloc<sizeof<MGraph>>;if<G==NULL>{printf<"memoryallcationfailed,goodbye">;exit<1>;}CreatGraph<G>;MiniSpanTree<G>;system<"pause">;return0;}運(yùn)行結(jié)果:五、實(shí)驗(yàn)總結(jié)〔結(jié)果分析和體會(huì)在編程時(shí).因?yàn)榭紤]的情況比較多.所以容易造成錯(cuò)誤和遺漏.為了避免這些問題的出現(xiàn).可以先用筆把所有的程序在紙上.然后再根據(jù)列表編寫程序.這樣不僅簡單易懂.還避免了一些不必要的錯(cuò)誤。編寫完程序后進(jìn)行調(diào)試.發(fā)現(xiàn)有很多錯(cuò)誤.其中也不乏一些基本的小錯(cuò)誤.所以程序?qū)懲旰筮M(jìn)行靜態(tài)檢查是必不可少的.其次是邏輯上的錯(cuò)誤.對于這些錯(cuò)誤.只能再認(rèn)真檢查整個(gè)程序.這就要求我們在編程時(shí)考慮要周到.或者可以請其他同學(xué)幫忙檢查。通過這次對算術(shù)表達(dá)式求值的設(shè)計(jì).讓我自己對克魯斯卡爾算法的運(yùn)用更深刻.能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程防水保溫工程承包合同
- 2025年度個(gè)人保證貸款合同范本
- 2025年度職業(yè)裝定制服務(wù)采購合同模板
- 2025年度大宗商品買賣合同運(yùn)輸管理范本
- 民間委托理財(cái)合同中保底條款效力研究
- 2025年度市政基礎(chǔ)設(shè)施施工合同范本(HNJS)
- 2025年度健身私教營養(yǎng)餐配方案服務(wù)合同
- 2025年度擠塑板板材品牌授權(quán)與市場拓展合同
- 2025年度建筑工地建筑材料運(yùn)輸配送合同
- 2025年度智慧教育平臺(tái)研發(fā)勞務(wù)承包合同(大清包)教育信息化合同
- 報(bào)價(jià)單(報(bào)價(jià)單模板)
- 刑事案件模擬法庭劇本完整版五篇
- 2014教師事業(yè)單位工作人員年度考核登記表1
- 烏海周邊焦化企業(yè)概況
- 22S803 圓形鋼筋混凝土蓄水池
- Flash動(dòng)畫設(shè)計(jì)與制作(FlashCS6中文版)中職PPT完整全套教學(xué)課件
- 2023年開心英語四年級上冊全冊練習(xí)
- Hadoop大數(shù)據(jù)開發(fā)實(shí)例教程高職PPT完整全套教學(xué)課件
- 新人教版小學(xué)數(shù)學(xué)五年級下冊教材分析課件
- 企業(yè)中層管理人員測評問題
- 人教版高中地理必修一全冊測試題(16份含答案)
評論
0/150
提交評論