Kruskal算法的设计和C实现_第1页
Kruskal算法的设计和C实现_第2页
Kruskal算法的设计和C实现_第3页
Kruskal算法的设计和C实现_第4页
Kruskal算法的设计和C实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三Kruskal算法的设计一、设计目的1.根据算法设计需要,掌握连通网的灵活表示方法;.掌握最小生成树的Kruskal算法;.基本掌握贪心算法的一般设计方法;.进一步掌握集合的表示与操作算法的应用.二、设计内容1.主要数据类型与变量typedefstruct{intnum;inttag;}NODE;typedefstruct{intcost;intnode1;intnode2;}EDGE;NODEset[N];/*节点集*/EDGEes[N];/*边集*/EDGEst[N];/*最小生成树的边集*/2.算法或程序模块intFind(NODE*set,intelem)功能:在数组set中顺序查找元素elem,使用带压缩规则的查找算法,返回所在子集的根节点索引.intUnion(NODE*set,intelem1,intelem2)功能:应用Find算法首先找到elemi和elem2所在的子集,然后应用带加权规则的并运算算法合并两个子集.不成功时,返回-1;否则,返回并集的根节点索引.intInsertSort(EDGE*dat,intn)功能:用插入分类算法将连通图的边集按成本值的非降次序分类.intKruskal(EDGE*es,NODE*set,intlength,EDGE*st,intnum)功能:对有length条权值大于0的边,最小生成树中有num条边的连通图,应用Kruskal算法生成最小生成树,最小生成树的边存储在数组st中.voidOutput(EDGE*st,intn)

功能:输出最小生成树的各条边.三测试结果 、测试数据和结果1C:\llsers\wxz\Deslb:op\5hiyan»ese碁不相邻则输入T=4<—>6=205<—>6-55当主it也山边也山边也山边也勺也也力边.■TL.11K. ;「:-「J. I.■.■-1■.1-1.■.1IT—.—-1.■.11.-■Ti.1C:\Users\wxz\Deslctop\5hiyan.ese权恒排序結果l升序》:10IE20 25 30 35 40 45 50 55最小权值边和:nincost=185聂小树的边数;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测试数据和结果2回回IfC:\Users\wxz\Desktop\shiy3n.eie诗触人结点彳冲羅人边的权值,若不碗输入-1边:K—>2=15远K—>3=20远K—>4=7ffi;K—>5=-1迅2<—>3=-1陋:2<—>4=28迅:2<—>5=3远3<—>4=30远3<—>5=-1远4<—>5=8.附:程序模块的源代码#include<stdio.h>#include<conio.h>#defineN100intlength;typedefstruct{intnum;inttag;}NODE;typedefstruct{intcost;intnode1;intnode2;}EDGE;NODEset[N];/*节点集,n为连通网的节点数*/EDGEes[N];/*边集,m为连通网的边数*/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("权值排序结果(升序):\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最小权值边和:mincost=%d\n",mincost);printf("\n最小树的边数:%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("请输入结点个数:”);scanf("%d",&length);for(i=0;i<length;i++){set[i].num=i;set[i].tag=-1;}printf("请输入边的权值,若不相邻则输入-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);/*提出权值大于0的边数*/InsertSort(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论