




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)三Kruskal算法的設(shè)計(jì)一、設(shè)計(jì)目的1.根據(jù)算法設(shè)計(jì)需要,掌握連通網(wǎng)的靈活表示方法;.掌握最小生成樹(shù)的Kruskal算法;.基本掌握貪心算法的一般設(shè)計(jì)方法;.進(jìn)一步掌握集合的表示與操作算法的應(yīng)用.二、設(shè)計(jì)內(nèi)容1.主要數(shù)據(jù)類(lèi)型與變量typedefstruct{intnum;inttag;}NODE;typedefstruct{intcost;intnode1;intnode2;}EDGE;NODEset[N];/*節(jié)點(diǎn)集*/EDGEes[N];/*邊集*/EDGEst[N];/*最小生成樹(shù)的邊集*/2.算法或程序模塊intFind(NODE*set,intelem)功能:在數(shù)組set中順序查找元素elem,使用帶壓縮規(guī)則的查找算法,返回所在子集的根節(jié)點(diǎn)索引.intUnion(NODE*set,intelem1,intelem2)功能:應(yīng)用Find算法首先找到elemi和elem2所在的子集,然后應(yīng)用帶加權(quán)規(guī)則的并運(yùn)算算法合并兩個(gè)子集.不成功時(shí),返回-1;否則,返回并集的根節(jié)點(diǎn)索引.intInsertSort(EDGE*dat,intn)功能:用插入分類(lèi)算法將連通圖的邊集按成本值的非降次序分類(lèi).intKruskal(EDGE*es,NODE*set,intlength,EDGE*st,intnum)功能:對(duì)有l(wèi)ength條權(quán)值大于0的邊,最小生成樹(shù)中有num條邊的連通圖,應(yīng)用Kruskal算法生成最小生成樹(shù),最小生成樹(shù)的邊存儲(chǔ)在數(shù)組st中.voidOutput(EDGE*st,intn)
功能:輸出最小生成樹(shù)的各條邊.三測(cè)試結(jié)果 、測(cè)試數(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ù)的邊數(shù);5最小生成樹(shù)的為:1234512345樹(shù)的表示:set[01.rum=lset[11樹(shù)的表示: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測(cè)試數(shù)據(jù)和結(jié)果2回回IfC:\Users\wxz\Desktop\shiy3n.eie詩(shī)觸人結(jié)點(diǎn)彳沖羅人邊的權(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é)點(diǎn)集,n為連通網(wǎng)的節(jié)點(diǎn)數(shù)*/EDGEes[N];/*邊集,m為連通網(wǎng)的邊數(shù)*/EDGEst[N];/*最小生成樹(shù)的邊集*/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ù)的邊數(shù):%d\n\n",k);returnk;}voidOutput(EDGE*st,intn){inti;printf("最小生成樹(shù)的為:\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("請(qǐng)輸入結(jié)點(diǎn)個(gè)數(shù):”);scanf("%d",&length);for(i=0;i<length;i++){set[i].num=i;set[i].tag=-1;}printf("請(qǐng)輸入邊的權(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貫徹落實(shí)老年教育發(fā)展規(guī)劃2012020年工作推進(jìn)會(huì)暨全國(guó)示范
- 向物業(yè)申請(qǐng)修改物業(yè)費(fèi)申請(qǐng)書(shū)(6篇)
- 2025財(cái)務(wù)部門(mén)年度工作計(jì)劃
- 2025年專(zhuān)門(mén)用途燈具:工藝裝飾燈具項(xiàng)目發(fā)展計(jì)劃
- 教育國(guó)際化背景下的文化沖突與融合問(wèn)題研究
- 教育技術(shù)與職業(yè)發(fā)展趨勢(shì)與挑戰(zhàn)并存
- 云南楚雄州南華縣民中2025年物理高二第二學(xué)期期末監(jiān)測(cè)試題含解析
- 2025年路面清潔裝備項(xiàng)目合作計(jì)劃書(shū)
- 2025年山東省即墨區(qū)重點(diǎn)高中物理高一第二學(xué)期期末復(fù)習(xí)檢測(cè)模擬試題含解析
- 如何利用活動(dòng)營(yíng)銷(xiāo)增強(qiáng)教育培訓(xùn)品牌形象
- 民法學(xué)全套精美課件
- 叉車(chē)安全駕駛技術(shù)(叉車(chē)基礎(chǔ)知識(shí)、安全駕駛、動(dòng)力裝置)課件
- 國(guó)內(nèi)高品質(zhì)膠原蛋白行業(yè)發(fā)展白皮書(shū)
- 《莊子》寓言對(duì)后世的影響
- 質(zhì)量過(guò)程報(bào)告記錄匯總表-scr與ncr表格報(bào)檢單
- 湖南省長(zhǎng)沙市2022-2023學(xué)年新高一英語(yǔ)入學(xué)分班考試試卷【含答案】
- k-bus產(chǎn)品手冊(cè)中文版ip interface使用手冊(cè)
- 第九講有機(jī)化學(xué)結(jié)構(gòu)理論
- 工程化學(xué)復(fù)習(xí)要點(diǎn)及習(xí)題解答童志平版本PPT課件
- 論中心蝶閥、單、雙、三、四偏心蝶閥
- 《中國(guó)語(yǔ)言文化》課程教學(xué)大綱
評(píng)論
0/150
提交評(píng)論