最小生成树及其算法_第1页
最小生成树及其算法_第2页
最小生成树及其算法_第3页
最小生成树及其算法_第4页
最小生成树及其算法_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、离散数学大作业论文题目: 最小生成树及其算法 院 系: 电子工程学院 专 业: 智能科学与技术 学 号: 姓 名: 二零一一 年 十一 月摘 要连通图广泛应用于交通建设,求连通图的最小生成树是最主要的应用。比如要在n个城市间建立通信联络网,要考虑的是如何保证n点连通的前提下最节省经费,就应用到了最小生成树。求图的最小生成树有两种算法,一种是Prim(普里姆)算法,另一种是Kruskal(克鲁斯卡尔)算法。本文主要介绍Prim(普里姆)算法及利用。本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成

2、情况进行了总结。关键字:prum算法 最小生成树 算法比较1.有关最小生成树的概念最小生成树:连通加权图里权和最小的生成树称为最小生成树。从最小生成树定义看主要先了解图、树及生成树。本文中最小生成树在计算机中存储方法是应用邻接矩阵的形式存储。故也应了解邻接矩阵的定义。定义一(图):图是有一个非空的顶点集合和一个描述顶点之间的关系即边的集合组成。它可以形式化的定义为:G=(V,E)V= | VertexTypeE=|,VP(,)其中,G表示一个图,V是图G中顶点的集合,E是V中顶点偶对的有限集,这些顶点偶对称为边,VertexType是用于描述顶点类型,集合E中P(,)的含义是:对有向图来说用“

3、”表示,对无向图来说用“()”表示,即从到 两个顶点之间存在边。定义二(树):树包含n(n=0)个节点。当n=0时表示为空树。其定义如下:T=(D,R)其中,D为树中节点的有限集合,关系R满足一下条件:1) 有且仅有一个节点k0属于D,它对于关系R来说没有前趋节点,结点k0称作树的根结点。2) 除根结点k0之外,D中的每个结点仅有一个前趋结点,但可以有过个后继结点。3) D中可以有多个终端结点。 即除根结点无父结点,其余各结点都有一个父结点和n(n=0)个子结点。 图的矩阵表示,本文中只用到了邻接矩阵,故在这只提出邻接矩阵的定义,及其图在邻接矩阵中的表示。设图 A = (V, E)是一个有 n

4、 个顶点的图, 图的邻接矩阵是一个二维数组 A.edgenn,用来存放顶点的信息和边或弧的信息。定义三(邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V=v1,v2,vn。G的邻接矩阵是一个具有下列性质的n阶方阵:(本文主要为无向图的邻接矩阵)(1) 无向图的邻接矩阵是对称的;有向图的邻接矩阵可能是不对称的。(1)无向图的邻接矩阵中第i行第j列表示i结点到j结点的度即权值,可以表示为某一具体应用的数据。也表示i结点是否与j结点连通。 定义四(生成树):如果T是G的一个生成子图又是一棵树,则称T是图G的一棵生成树。2.prim算法介绍从

5、单一顶点开始,普里姆算法按照以下步骤逐步扩大树中所含顶点的数目,直到遍及连通图的所有顶点。1. 输入:一个加权连通图,其中顶点集合为V,边集合为E;2. 初始化:Vnew = x,其中x为集合V中的任一节点(起始点),Enew = ;3. 重复下列操作,直到Vnew = V: 1. 在集合E中选取权值最小的边(u, v),其中u为集合Vnew中的元素,而v则不是(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);2. 将v加入集合Vnew中,将(u, v)加入集合Enew中;4. 输出:使用集合Vnew和Enew来描述所得到的最小生成树。3.prim算法的实现#includ

6、e#define TURE 999typedef struct ArcNodechar vexs10;int edgs1010;int n,e;MGraph;struct edgint v1;int v2;int cost;A10,B10;/创建图void GreateMGraph(MGraph *G) int i,j,k,weight,m,n;int ch1,ch2;char a,b;printf(ntt输入顶点数边数(格式如:3 4):);scanf(%d %d,&(G-n),&(G-e); /输入顶点数,边数for(i=0;in;i+)getchar();printf(ntt请输入第%d

7、个顶点:,i+1);scanf(%c,&(G-vexsi); /输入顶点 for(i=0;in;i+)for(j=0;jn;j+)G-edgsij=0;for(k=0;ke;k+)/getchar();printf(ntt请输入第%d条边的顶点权值(格式如:i j):,k+1);getchar(); scanf(%c %c %d,&a,&b,&weight);/scanf(%c,&a);/getchar(); / scanf(%c,&b);m=0;n=0; for( m=0;G-vexsm!=a;m+); for( n=0;G-vexsn!=b;n+);/printf(ntt请输入权值:);s

8、canf(%d,&weight); ch1=m;ch2=n; G-edgsch1ch2=weight;G-edgsch2ch1=weight;void prim(MGraph *G, int v) int i,j,k,min; struct int adjvex; int lowcost; closedge10; for (i=0;in;i+) /初始化 closedgei.lowcost=G-edgsvi; closedgei.adjvex=v; closedgev.lowcost=TURE; for (i=1;in;i+) min=100; /* 100为允许的最大权值*/ for(j=0

9、;jn;j+) if (closedgej.lowcost!=TURE & closedgej.lowcost!=0) if (closedgej.lowcostvexsclosedgek.adjvex, G-vexsk, min); closedgek.lowcost=TURE; for (j=0;jn;j+) if (closedgej.lowcost!=TURE) if(G-edgskjedgskj; closedgej.adjvex=k; void Kruskal(MGraph *G)int k=0,m=0,n=0;int vf1,vf2,min,vset100;for(int i=0

10、;in;i+)for(int j=0;jn;j+)if(G-edgsij!=0)if(iedgsij;k+;n=0;while(me-1)min=999;for(i=n;ik;i+)if(Ai.costmin)Bn.v1=Ai.v1;Bn.v2=Ai.v2;Bn.cost=An.cost;min=Ai.cost;n+;m+;for(i=0;in;i+)vseti=i;k=0;while(ke)vf1=Bk.v1;vf2=Bk.v2;if(vsetvf1!=vsetvf2)printf(%c,%c,%d),G-vexsBk.v1,G-vexsBk.v2,Bk.cost);vsetvf2=vset

11、vf1;k+;int main(void)MGraph *G,a; char ch1;int choice;G=&a;printf(ntt建立图的邻接矩阵n); GreateMGraph(G); /* printf(ntt已建立一个邻接矩阵!n);for(i=0;in;i+)printf(ntt);for(j=0;jn;j+)printf(%5d,G-edgsij);*/getchar();ch1=1;while(ch1=1)printf(n);printf(ntt 最小生成树 );printf(ntt*);printf(ntt* 1prim算法 *);/printf(ntt* 2kruska

12、l算法 *);printf(ntt* 0退 出 *);printf(ntt*);printf(ntt请选择菜单号0-1:);scanf(%d,&choice);getchar();switch(choice)case 1: printf(nttprim算法输出为:); prim(G,0);break;case 2:printf(nttKruskal算法输出为:); Kruskal(G);break;case 0: ch1=0; break;default:printf(ntt输入错误!请重新输入!);return 0;4应用prim算法的例子 如下图所示的赋权图表示某七个城市 及预先算出它们之间的一些直接通信成路造价(单位:万元),试给出一个设计方案,使得各

温馨提示

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

评论

0/150

提交评论