![Kruskal算法的設(shè)計和C實現(xiàn)_第1頁](http://file4.renrendoc.com/view/e5e856bdde434706d4cb7c3074d815b9/e5e856bdde434706d4cb7c3074d815b91.gif)
![Kruskal算法的設(shè)計和C實現(xiàn)_第2頁](http://file4.renrendoc.com/view/e5e856bdde434706d4cb7c3074d815b9/e5e856bdde434706d4cb7c3074d815b92.gif)
![Kruskal算法的設(shè)計和C實現(xiàn)_第3頁](http://file4.renrendoc.com/view/e5e856bdde434706d4cb7c3074d815b9/e5e856bdde434706d4cb7c3074d815b93.gif)
![Kruskal算法的設(shè)計和C實現(xiàn)_第4頁](http://file4.renrendoc.com/view/e5e856bdde434706d4cb7c3074d815b9/e5e856bdde434706d4cb7c3074d815b94.gif)
![Kruskal算法的設(shè)計和C實現(xiàn)_第5頁](http://file4.renrendoc.com/view/e5e856bdde434706d4cb7c3074d815b9/e5e856bdde434706d4cb7c3074d815b95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實驗三Kruskal算法的設(shè)計一、設(shè)計目的1.根據(jù)算法設(shè)計需要,掌握連通網(wǎng)的靈活表示方法;.掌握最小生成樹的Kruskal算法;.基本掌握貪心算法的一般設(shè)計方法;.進(jìn)一步掌握集合的表示與操作算法的應(yīng)用.二、設(shè)計內(nèi)容1.主要數(shù)據(jù)類型與變量typedefstruct{intnum;inttag;}NODE;typedefstruct{intcost;intnode1;intnode2;}EDGE;NODEset[N];/*節(jié)點集*/EDGEes[N];/*邊集*/EDGEst[N];/*最小生成樹的邊集*/2.算法或程序模塊intFind(NODE*set,intelem)功能:在數(shù)組set中順序查找元素elem,使用帶壓縮規(guī)則的查找算法,返回所在子集的根節(jié)點索引.intUnion(NODE*set,intelem1,intelem2)功能:應(yīng)用Find算法首先找到elemi和elem2所在的子集,然后應(yīng)用帶加權(quán)規(guī)則的并運算算法合并兩個子集.不成功時,返回-1;否則,返回并集的根節(jié)點索引.intInsertSort(EDGE*dat,intn)功能:用插入分類算法將連通圖的邊集按成本值的非降次序分類.intKruskal(EDGE*es,NODE*set,intlength,EDGE*st,intnum)功能:對有l(wèi)ength條權(quán)值大于0的邊,最小生成樹中有num條邊的連通圖,應(yīng)用Kruskal算法生成最小生成樹,最小生成樹的邊存儲在數(shù)組st中.voidOutput(EDGE*st,intn)
功能:輸出最小生成樹的各條邊.三測試結(jié)果 、測試數(shù)據(jù)和結(jié)果1C:\llsers\wxz\Deslb:op\5hiyan?ese碁不相鄰則輸入T=4<—>6=205<—>6-55當(dāng)主it也山邊也山邊也山邊也勺也也力邊.■TL.11K. ;「:-「J. I.■.■-1■.1-1.■.1IT—.—-1.■.11.-■Ti.1C:\Users\wxz\Deslctop\5hiyan.ese權(quán)恒排序結(jié)果l升序》:10IE20 25 30 35 40 45 50 55最小權(quán)值邊和:nincost=185聶小樹的邊數(shù);5最小生成樹的為:1234512345樹的表示:set[01.rum=lset[11樹的表示:set[01.rum=lset[11.rum=2set[21=rmm=3se七[3]■riurn^4setL41.rum=5settS1.ru,m=6setL0Ktag=2set[1]-tag=0set[2J=ta?j=—6:st:七[3]-tagr-2set14J.tag=Zset[5J.tag=2測試數(shù)據(jù)和結(jié)果2回回IfC:\Users\wxz\Desktop\shiy3n.eie詩觸人結(jié)點彳沖羅人邊的權(quán)值,若不碗輸入-1邊:K—>2=15遠(yuǎn)K—>3=20遠(yuǎn)K—>4=7ffi;K—>5=-1迅2<—>3=-1陋:2<—>4=28迅:2<—>5=3遠(yuǎn)3<—>4=30遠(yuǎn)3<—>5=-1遠(yuǎn)4<—>5=8.附:程序模塊的源代碼#include<stdio.h>#include<conio.h>#defineN100intlength;typedefstruct{intnum;inttag;}NODE;typedefstruct{intcost;intnode1;intnode2;}EDGE;NODEset[N];/*節(jié)點集,n為連通網(wǎng)的節(jié)點數(shù)*/EDGEes[N];/*邊集,m為連通網(wǎng)的邊數(shù)*/EDGEst[N];/*最小生成樹的邊集*/intInsertSort(EDGE*dat,intn){inti,item,j,m,h;for(i=0;i<n;i++){item=dat[i].cost;m=dat[i].node1;h=dat[i].node2;if(i==0){j=0;dat[j].cost=item;}else{j=i-1;while((item<dat[j].cost)&&(j>=0)){dat[j+1].cost=dat[j].cost;dat[j+1].node1=dat[j].node1;dat[j+1].node2=dat[j].node2;j--;}
dat[j+1].cost=item;
dat[j+1].node1=m;
dat[j+1].node2=h;}}printf("權(quán)值排序結(jié)果(升序):\n");for(i=0;i<n;i++)printf("%4d",dat[i].cost);printf("\n\n");intFind(NODE*set,intelem){inti,j,k;i=elem;while(set[i].tag>=0){i=set[i].tag;}j=elem;while(j!=i){k=set[j].tag;set[j].tag=i;j=k;}returni;}intUnion(NODE*set,intelem1,intelem2){intm,n,sum;m=Find(set,elem1);n=Find(set,elem2);sum=set[m].tag+set[n].tag;if(set[m].tag>set[n].tag){set[n].tag=sum;set[m].tag=n;}else{set[m].tag=sum;set[n].tag=m;}}intQuquanzhi(EDGE*es,intn){inti,j=0,len;EDGEb[N];for(i=0;i<=n;i++){if(es[i].cost>0){b[j].cost=es[i].cost;b[j].node1=es[i].node1;b[j].node2=es[i].node2;j++;}}len=j;printf("\n");for(i=0;i<len;i++){es[i].cost=b[i].cost;es[i].node1=b[i].node1;es[i].node2=b[i].node2;}printf("\n");returnlen;intKruskal(EDGE*es,NODE*set,intlength,EDGE*st,intnum){inti,j,k=1,m,n,mincost=0;st[0].cost=es[0].cost;st[0].node1=es[0].node1;st[0].node2=es[0].node2;m=Find(set,st[0].node1);n=Find(set,st[0].node2);Union(set,m,n);mincost+=es[0].cost;for(i=1;i<length;i++)/*找其他邊*/{m=Find(set,es[i].node1);n=Find(set,es[i].node2);if(m!=n){Union(set,m,n);st[k].cost=es[i].cost;st[k].node1=es[i].node1;st[k].node2=es[i].node2;mincost+=es[i].cost;k++;}if(k==num)break;}printf("\n最小權(quán)值邊和:mincost=%d\n",mincost);printf("\n最小樹的邊數(shù):%d\n\n",k);returnk;}voidOutput(EDGE*st,intn){inti;printf("最小生成樹的為:\n\n");for(i=0;i<n;i++){printf("邊%4:%3dv-->%d=%d\n",i+1,st[i]?node1+1,st[i]?node2+1,st[i]?cost);}intmain()inti,j,k=0,L,temp,len;NODE*p,*q;textbackground(BLUE);textcolor(YELLOW);system("graftabl935");/*顯示中文必須的代碼*/clrscr();printf("請輸入結(jié)點個數(shù):”);scanf("%d",&length);for(i=0;i<length;i++){set[i].num=i;set[i].tag=-1;}printf("請輸入邊的權(quán)值,若不相鄰則輸入-1\n");for(i=0;i<length;i++){for(j=i+1;j<length;j++){ printf("邊:%dv-->%d=",i+1j+1);scanf("%d",&es[k].cost);es[k].node1=i;es[k].node2=j;k++;}}temp=k;L=Ququanzhi(es,temp);/*提出權(quán)值大于0的邊數(shù)*/InsertSort(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 10吃飯有講究(說課稿)-部編版道德與法治一年級上冊
- 7 湯姆·索亞歷險記(節(jié)選)說課稿-2023-2024學(xué)年六年級下冊語文統(tǒng)編版
- 2025集體土地房屋轉(zhuǎn)讓合同
- Unit 2 My week PB Let's talk (說課稿)-2024-2025學(xué)年人教PEP版英語五年級上冊001
- 2025產(chǎn)品銷售咨詢服務(wù)合同(中介撮合客戶)
- 2025合同模板車位租賃合同范本
- 10吃飯有講究 說課稿-2024-2025學(xué)年道德與法治一年級上冊統(tǒng)編版001
- 個人汽車信貸合同范例
- 鄉(xiāng)村道路改造雨季施工方案
- 重慶不銹鋼支撐施工方案
- 呆死帳的發(fā)生與預(yù)防課件
- 10000中國普通人名大全
- 導(dǎo)數(shù)常見函數(shù)圖像
- 起重機(jī)械安裝吊裝危險源辨識、風(fēng)險評價表
- 華北理工兒童口腔醫(yī)學(xué)教案06兒童咬合誘導(dǎo)
- 中國建筑項目管理表格
- 高一3班第一次月考總結(jié)班會課件
- 公共政策分析導(dǎo)論教學(xué)課件匯總完整版電子教案
- 我國油菜生產(chǎn)機(jī)械化技術(shù)(-119)
- 大跨度斜拉橋上部結(jié)構(gòu)施工技術(shù)(圖文并茂)
- 論人口模型論文計劃生育政策調(diào)整對人口數(shù)量結(jié)構(gòu)及其影響
評論
0/150
提交評論