版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1、 實(shí)驗(yàn)?zāi)康模赫莆請(qǐng)D的存儲(chǔ)表示和以及圖的最小生成樹(shù)算法。二、實(shí)驗(yàn)內(nèi)容:1. 實(shí)現(xiàn)圖的存儲(chǔ),并且讀入圖的內(nèi)容。2. 利用克魯斯卡爾算法求網(wǎng)絡(luò)的最小生成樹(shù)。3. 實(shí)現(xiàn)構(gòu)造生成樹(shù)過(guò)程中的連通分量抽象數(shù)據(jù)類型。4. 以文本形式輸出對(duì)應(yīng)圖的最小生成樹(shù)各條邊及權(quán)值。三、實(shí)驗(yàn)要求:1 在上機(jī)前寫出全部源程序;2 能在機(jī)器上正確運(yùn)行程序;3 用戶界面友好。需求分析:1、利用克魯斯卡爾算法求網(wǎng)的最小生成樹(shù);2、以用戶指定的結(jié)點(diǎn)為起點(diǎn),分別輸出每種遍歷下的結(jié)點(diǎn)訪問(wèn)序列;3、輸入為存在邊的頂點(diǎn)對(duì),以及它們之間的權(quán)值;輸出為所得到的鄰接矩陣以及按權(quán)排序后的邊和最后得到的最小生成樹(shù);克魯斯卡爾算法:假設(shè) WN=(V,
2、E) 是一個(gè)含有 n 個(gè)頂點(diǎn)的連通網(wǎng),按照構(gòu)造最小生成樹(shù)的過(guò)程為:先構(gòu)造一個(gè)只含 n 個(gè)頂點(diǎn),而邊集為空的子圖,之后,從網(wǎng)的邊集 E 中選取一條權(quán)值最小的邊,若該條邊的兩個(gè)頂點(diǎn)分屬不同的樹(shù),則將其加入子圖,反之,若該條邊的兩個(gè)頂點(diǎn)已落在同一棵樹(shù)上,則不可取,而應(yīng)該取下一條權(quán)值最小的邊再試之。依次類推,直至只有一棵樹(shù),也即子圖中含有 n-1條邊為止。 測(cè)試數(shù)據(jù): 自行指定圖進(jìn)行運(yùn)算四、詳細(xì)設(shè)計(jì) 源程序#include<stdio.h>#include<stdlib.h>#define M 20#define MAX 20typedef struct int begin;
3、int end; int weight;edge;typedef struct int adj; int weight;AdjMatrixMAXMAX;typedef struct AdjMatrix arc; int vexnum, arcnum;MGraph;void CreatGraph(MGraph *); void sort(edge* ,MGraph *);void MiniSpanTree(MGraph *);int Find(int *, int );void Swapn(edge *, int, int);void CreatGraph(MGraph *G) int i, j
4、,n, m; printf("請(qǐng)輸入邊數(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->arcij.adj = G->arcji.adj = 0; for ( i = 1; i <= G->arcnum; i+) printf("n請(qǐng)輸入有邊的2個(gè)頂點(diǎn)"); scanf("
5、;%d %d",&n,&m); while(n < 0 | n > G->vexnum | m < 0 | n > G->vexnum) printf("輸入的數(shù)字不符合要求 請(qǐng)重新輸入:"); scanf("%d%d",&n,&m); G->arcnm.adj = G->arcmn.adj = 1; getchar(); printf("n請(qǐng)輸入%d與%d之間的權(quán)值:", n, m); scanf("%d",&G-&
6、gt;arcnm.weight); printf("鄰接矩陣為:n"); for ( i = 1; i <= G->vexnum; i+) for ( j = 1; j <= G->vexnum; j+) printf("%d ",G->arcij.adj); printf("n"); void sort(edge edges,MGraph *G) int i, j; for ( i = 1; i < G->arcnum; i+) for ( j = i + 1; j <= G->
7、arcnum; j+) if (edgesi.weight > edgesj.weight) Swapn(edges, i, j); printf("權(quán)排序之后的為:n"); for (i = 1; i < G->arcnum; i+) printf("<< %d, %d >> %dn", edgesi.begin, edgesi.end, edgesi.weight); void Swapn(edge *edges,int i, int j) int temp; temp = edgesi.begin; edg
8、esi.begin = edgesj.begin; edgesj.begin = temp; temp = edgesi.end; edgesi.end = edgesj.end; edgesj.end = temp; temp = edgesi.weight; edgesi.weight = edgesj.weight; edgesj.weight = temp; void MiniSpanTree(MGraph *G) int i, j, n, m; int k = 1; int parentM; edge edgesM; for ( i = 1; i < G->vexnum;
9、 i+) for (j = i + 1; j <= G->vexnum; j+) if (G->arcij.adj = 1) edgesk.begin = i; edgesk.end = j; edgesk.weight = G->arcij.weight; k+; sort(edges, G); for (i = 1; i <= G->arcnum; i+) parenti = 0; printf("最小生成樹(shù)為:n"); for (i = 1; i <= G->arcnum; i+) n = Find(parent, ed
10、gesi.begin); m = Find(parent, edgesi.end); if (n != m) parentn = m; printf("<< %d, %d >> %dn", edgesi.begin, edgesi.end, edgesi.weight); int Find(int *parent, int f) while ( parentf > 0) f = parentf; return f;int main(void) MGraph *G; G = (MGraph*)malloc(sizeof(MGraph); if (
11、G = NULL) printf("memory allcation failed,goodbye"); exit(1); CreatGraph(G); MiniSpanTree(G); system("pause"); return 0;運(yùn)行結(jié)果:五、實(shí)驗(yàn)總結(jié)(結(jié)果分析和體會(huì))在編程時(shí),因?yàn)榭紤]的情況比較多,所以容易造成錯(cuò)誤和遺漏,為了避免這些問(wèn)題的出現(xiàn),可以先用筆把所有的程序在紙上,然后再根據(jù)列表編寫程序,這樣不僅簡(jiǎn)單易懂,還避免了一些不必要的錯(cuò)誤。編寫完程序后進(jìn)行調(diào)試,發(fā)現(xiàn)有很多錯(cuò)誤,其中也不乏一些基本的小錯(cuò)誤,所以程序?qū)懲旰筮M(jìn)行靜態(tài)檢查是必不可少的,其次是邏輯上的錯(cuò)誤,對(duì)于這些錯(cuò)誤,只能再認(rèn)真檢查整個(gè)程序,這就要求我們?cè)诰幊虝r(shí)考慮要周到,或者可以請(qǐng)其他同學(xué)幫忙檢查。通過(guò)這次對(duì)算術(shù)表達(dá)式求值的設(shè)計(jì),讓我自己對(duì)克魯斯卡爾算法的運(yùn)用更深刻,能
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 歷史材料解析題(解題指導(dǎo)+專項(xiàng)練習(xí))(解析版)
- 紡織服裝業(yè)自購(gòu)料采購(gòu)管理辦法
- 教育培訓(xùn)機(jī)構(gòu)物業(yè)管理招標(biāo)
- 村集體資產(chǎn)評(píng)估招標(biāo)實(shí)施細(xì)則
- 高山道路擴(kuò)建爆破協(xié)議
- 養(yǎng)老院護(hù)理工作制度
- 租賃企業(yè)薪酬分配改革管理辦法
- 建筑工程租賃起重機(jī)協(xié)議
- 車牌互換合同范本模板
- 湖南2025年湖南機(jī)電職業(yè)技術(shù)學(xué)院合同制教師招聘31人歷年參考題庫(kù)(頻考版)含答案解析
- 2024年電子交易:電腦買賣合同
- 中國(guó)文化概論知識(shí)試題與答案版
- 期末復(fù)習(xí)提升測(cè)試(試題)(含答案)2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- 生和碼頭港口設(shè)施維護(hù)管理制度(3篇)
- 黑龍江省哈爾濱市第六中學(xué)2025屆高考數(shù)學(xué)三模試卷含解析
- 【MOOC】數(shù)字邏輯設(shè)計(jì)及應(yīng)用-電子科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 傷口治療師進(jìn)修匯報(bào)
- 研學(xué)活動(dòng)協(xié)議書合同范本
- ISBAR輔助工具在交班中應(yīng)用
- 鑄牢中華民族共同體意識(shí)-形考任務(wù)3-國(guó)開(kāi)(NMG)-參考資料
評(píng)論
0/150
提交評(píng)論