数据结构课程设计最小生成树的普里姆算法课设.doc
《数据结构课程设计最小生成树的普里姆算法课设.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计最小生成树的普里姆算法课设.doc(25页珍藏版)》请在三一办公上搜索。
1、数据结构课程设计设计说明书最小生成树普里姆算法的实现学生姓名 学 号 班 级 成 绩 指导教师 数学与计算机科学学院2013年3月15日 课程设计任务书20122013学年第二学期课程设计名称: 数据结构课程设计 课程设计题目: 最小生成树普里姆算法的实现 完 成 期 限:自 2013年 3 月4日至 2013年 3 月 15 日共 2 周设计内容:图论中,对于个带权的连通图,其每个生成树所有边上的权值之和可能不同,把其所有边上权值之和最小的生成树称为图的最小生成树。通讯线路铺设造价最优问题就是最小生成树的实际应用。 普里姆算法的的基本思想:从连通网N=V,E中的某一顶点U0出发,选择与它关联
2、的具有最小权值的边(U0,v),将其顶点加入到生成树的顶点集合U中。以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u,v),把它的顶点加入到集合U中。如此继续下去,直到网中的所有顶点都加入到生成树顶点集合U中为止。 本课程设计中主要完成以下内容: 1.任意给出一个带权值的连通网络图,能够遍历图中的所有节点。 2. 根据普里姆算法思想,编程实现此连通图的最小生成树的输出。 3.计算讨论算法的时间复杂度及空间复杂度。 基本要求如下: 1.程序设计界面友好;2.设计思想阐述清晰;3.算法流程图正确;4.软件测试方案合理、有效。 指导教师: 教研室负责人: 课程设计评阅评
3、语: 指导教师签名: 年 月 日摘 要本课题以Visual C+ 6.0作为开发环境,编程实现了连通网中的最短路径算法。该程序操作简单,界面清晰,易于掌握和理解。关键词:普里姆算法;连通络网;Visual C+ 6.0;最短路径目 录1 课题描述12 算法描述221算法思想222最小生成树生成过程323普里姆算法424需要解决的问题425解决问题的方法53 流程图64 程序源代码115 程序测试156总结19参考文献201 课题描述在我们的平时生活中,人们都希望花最少的时间或者最少的金钱将一件事情办成,例如:一个邮递员想走最短的路把手中的物件送到收件人手中,通信公司想花费最少的金钱把通信网络覆
4、盖在n个城市之间,这些都可归纳为求最短路径问题。 本课题利用普里姆算法来实现各城市之间铺设煤气管道连通网络中各种连接方式中的最短路径问题,从而达到一条最优线路,以使金钱或时间的花费最小,达到解决成本的目的。 开发工具:visual c+ 6.02 算法描述 本设计是基于最小生成树普里姆算法的思想上,以实现在网络中可以选择出最短线路,从而达到省时省力的效果。2.1算法思想普里姆算法的基本思想:从连通网络 N = V, E 中的某一顶点 u0 出发, 选择与它关联的具有最小权值的边 ( u0, v ), 将其顶点加入到生成树顶点集合U中。以后每一步从一个顶点在 U 中,而另一个顶点不在 U 中的各
5、条边中选择权值最小的边(u, v), 把它的顶点加入到集合 U 中。如此继续下去, 直到网络中的所有顶点都加入到生成树顶点集合 U 中为止。存储方式:采用邻接矩阵作为图的存储表示假设要在n个城市之间建立通信联络网,则联通n个城市只需要n-1条线路,然而n个城市之间最多可能设置n(n-1)/2条线路,此时,自然会考虑一个问题,如何在这些可能的线路中选择n-1条,使的在最节省经费的前提下建立起这个通信网。这就可以简化为构造联通网的最小代价生成树(简称 最小生成树)问题。任务:根据普里姆的算法思想,输出连通网络图的最小生成树。2.2最小生成树生成过程 普里姆算法最小生成树生成过程的图示如图2.1所示
6、: 2.3普里姆算法void MiniSpanTree_PRIM(Graph G,VertexType u) /用普里姆算法从第u个顶点出发构造网G的最小生成树T,输出T的各条边。/记录从顶点集U到V-U的代价最小边的辅助数组定义:/struct / Vertextype adjvex;/ VRType lowcost;/ closedegeMAX_VERTEX_NUM; k=LocateVex (G, u); for(j=0;jG.vexnum;+j) /* 辅助数组初始化 */ if(j!=k) closedgej=u, G.arcskj.adj; /adjvex, lowcost clo
7、sedgek.lowcost=0; /* 初始,U=u */ for(i=1;iG.vexnum;+i) /* 选择其余的G.vexnum-1个顶点 */ k=minimum(closedge); /* 求出生成树T的下一个顶点 */ printf(closedgek.adjvex,G.vexsk); /* 输出生成树的边 */ closedgek.lowcost=0; /* 第k顶点并入U集 */ for(j=0;j=G.vexnum;+j) if(G.arcskj.adjclosedgej.lowcost) / 新顶点并入U后重新选择最小边 closedgej = G.vexsk,G.ar
8、cskj.adj ;/ MiniSpanTree2.4需要解决的问题PRIM算法中需要解决的两个问题:在无向网中,当出现从一个顶点到其它顶点时,若其边上的权值相等,则可能从某一起点出发时会得出不同的最小生成树,但最小生成树的权必定都相等,此时我们应该怎样将所有的最小生成树求解出来;每次如何从生成树T中到T外的所有边中,找出一条最短边。例如,在第k次(1kn-1)前,生成树T中已有k个顶点和k-1条边,此时T中到T外的所有边数为k(n-k),当然它也包括两顶点间没有直接边相联,其权值被看做常量INFINIT的边在内,从如此多的边中查找最短边,其时间复杂度为O(k(n-k),显然是很费时的,是否有
9、一种好的方法能够降低查找最短边的时间复杂度。2.5解决问题的方法针对中出现的问题可以通过在算法中实现,详情请看PRIM算法的基本思想;针对中出现的问题,通过对PRIM算法的分析,可以使查找最短边的时间复杂度降低到O(n-k)。具体方法是假定在进行第k次前已经保留着从T中到T外的每一顶点(共n-k个顶点)的各一条最短边,进行第k次时,首先从这n-k条最短边中,找出一条最最短的边,它就是从T中到T外的所有边中的最短边,假设为(i,j),此步需进行n-k次比较;然后把边(i,j)和顶点j分别并入T中的边集TE和顶点集U中,此时T外只有n-(k+1)个顶点,对于其中的每个顶点t,若(j,t)边上的权值
10、小于已保留的从原T中到顶点t的最短边的权值,则用(j,t)修改之,使从T中到T外顶点t的最短边为(j,t),否则原有最短边保持不变,这样,就把第k次后从T中到T外每一顶点t的各一条最短边都保留下来了,为进行第k+1次运算做好了准备,此步需进行n-k-1次比较。所以,利用此方法求第k次的最短边共需比较2(n-k)-1次,即时间复杂度为O(n-k)。3 流程图1) 主函数流程图如图3 .1所示:开始显示菜单,进行选择示例帮助(example())输出函数put()退出系统结束breakbreak谢谢使用! 图 3.1 主函数流程图2) 无向图的建立及初始化流程图如图3.2所示开始int i=1,j
11、=1,start,end,weightjvexnum-ivexnum-G-arcsij=INFINITY;j+NYYNG-arcsstartend=weight;G-arcsendstart=weight;结束输入弧的两个顶点和权值输入图的顶点和弧数图 3. 2 无向图的建立及初始化3) MiniSpanTree_PRIM函数流程图如图3.3所示4) minimum函数流程图如图3.4所示开始int i=1,w,p;w=INFINITYi=vnum-Ycli.lowcost!=0&cli.lowcostwYw=cli.lowcost;p=i;return pi+NN结束 图 3.4 minim
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 最小 生成 普里姆 算法
链接地址:https://www.31ppt.com/p-2396878.html