ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:124.65KB ,
资源ID:8766319      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8766319.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新版数据结构毕业课程设计报告最小生成树Kruskal算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新版数据结构毕业课程设计报告最小生成树Kruskal算法.docx

1、最新版数据结构毕业课程设计报告最小生成树Kruskal算法课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:最小生成树Kruskal算法院(系):专 业:班 级:学 号:姓 名:指导教师: 目 录1 课程设计介绍 11.1 课程设计内容 11.2 课程设计要求 12 课程设计原理 22.1 课设题目粗略分析 22.2 原理图介绍 42.2.1 功能模块图 42.2.2 流程图分析 53 数据结构分析 113.1 存储结构 113.2 算法描述 114 调试与分析 134.1 调试过程 134.2 程序执行过程 13参考文献 16附 录(关键部分程序清单) 17 1 课程设计介绍

2、1.1 课程设计内容 编写算法能够建立带权图,并能够用Kruskal算法求该图的最小生成树。最小生成树能够选择图上的任意一点做根结点。最小生成树输出采用顶点集合和边的集合的形式。1.2 课程设计要求1. 顶点信息用字符串,数据可自行设定。2. 参考相应的资料,独立完成课程设计任务。3. 交规范课程设计报告和软件代码。2 课程设计原理2.1 课设题目粗略分析根据课设题目要求,拟将整体程序分为三大模块。以下是三个模块的大体分析:1. 要确定图的存储形式,通过对题目要求的具体分析。发现该题的主要操作是路径的输出,因此采用边集数组(每个元素是一个结构体,包括起点、终点和权值)和邻接矩阵比较方便以后的编

3、程。2. Kruskal算法。该算法设置了集合A,该集合一直是某最小生成树的子集。在每步决定是否把边(u,v)添加到集合A中,其添加条件是A(u,v)仍然是最小生成树的子集。我们称这样的边为A的安全边,因为可以安全地把它添加到A中而不会破坏上述条件。3. Dijkstra算法。算法的基本思路是:假设每个点都有一对标号(dj,pj),其中d是从起源点到点j的最短路径的长度(从顶点到其本身的最短路径是零路(没有弧的路),其长度等于零);pj则是从s到j的最短路径中j点的前一点。求解从起源点s到点j的最短路径算法的基本过程如下:1) 初始化。起源点设置为:ds=0,ps为空;所有其它点:di=,pi

4、=?;标记起源点s,记k=s,其他所有点设为未标记的。2) k到其直接连接的未标记的点j的距离,并设置: dj=mindj, dk+lkj式中,lkj是从点k到j的直接连接距离。3) 选取下一个点。从所有未标记的结点中,选取dj中最小的一个i: di=mindj, 所有未标记的点j 点i就被选为最短路径中的一点,并设为已标记的。4)找到点i的前一点。从已标记的点中找到直接连接到i的点j*,作为前一点,设置: i=j*5)标记点i。如果所有点已标记,则算法完全推出,否则,记k=i,转到2)再继续。而程序中求两点间最短路径算法。其主要步骤是:1 调用dijkstra算法。2 将path中的第“终点

5、”元素向上回溯至起点,并显示出来。 2.2 原理图介绍2.2.1 功能模块图图2.1 功能模块图 2.2.2 流程图分析1. 主函数 图2.2 主函数流程图2. insertsort函数3. 图2.3 insertsort函数流程图3Kruskal函数 图2.4 Kruskal函数流程图4. dijkstra函数 图2.5 dijkstra函数流程图5. printpath1函数 图2.6 printpath1函数流程图 6. printpath2函数 图2.7 printpath2函数流程图3 数据结构分析3.1 存储结构定义一个结构体数组,其空间足够大,可将输入的字符串存于数组中。stru

6、ct edgesint bv; int tv; int w;3.2 算法描述1. Kruskal函数: 因为Kruskal需要一个有序的边集数组,所以要先对边集数组排序。其次,在执行中需要判断是否构成回路,因此还需另有一个判断函数seeks,在Kruskal中调用seeks。2. dijkstra函数: 因为从一源到其余各点的最短路径共有n-1条,因此可以设一变量vnum作为计数器控制循环。该函数的关键在于dist数组的重新置数。该置数条件是:该顶点是被访问过,并且新起点到该点的权值加上新起点到源点的权值小于该点原权值。因此第一次将其设为:if(sw=0&costuw+distudistw)。

7、但是在实际运行中,发现有些路径的权值为负。经过分析发现,因为在程序中由32767代替。若costuw=32767,那么costuw+distu肯定溢出主负值,因此造成权值出现负值。但是如果costuw=32767,那么distw肯定不需要重新置数。所以将条件改为:if(sw=0&costuw+distudistw&costuw!=32767)。修改之后问题得到解决。3. printpath1函数:该函数主要用来输出源点到其余各点的最短路径。因为在主函数调用该函数前,已经调用了dijkstra函数,所以所需的dist、path、s数组已经由dijkstra函数生成,因此在该函数中,只需用一变量控

8、制循环,一一将path数组中的每一元素回溯至起点即可。其关键在于不同情况下输出形式的不同。4. printpath2函数:该函数主要用来输出两点间的最短路径。其主要部分与printpath1函数相同,只是无需由循环将所有顶点一一输出,只需将path数组中下标为v1的元素回溯至起点并显示出来。4 调试与分析4.1 调试过程在调试程序时主要遇到一下几类问题:1. 有时函数中一些数组中的数据无法存储。2. 对其进行检验发现没有申请空间大小。3. 在源程序的开头用#define定义数值大小,在使用数组时亦可知道它的空间大小。4. 此函数中有时出现负值。5. 对其进行检验发现在程序中由32767代替。若

9、costuw=32767,那么costuw+distu肯定溢出主负值,因此造成权值出现负值。6. 但是当costuw=32767,那么distw肯定不需要重新置数。所以将if(sw=0&costuw+distudistw)改为:if(sw=0&costuw+distu0) i=seti; return i;void kruskal(edgeset ge,int n,int e) int setMAXE,v1,v2,i,j; for(i=1;in+1;i+) seti=0; i=1; j=1;while(j=e&i=n-1) v1=seeks(set,gej.bv); v2=seeks(set,

10、gej.tv); if(v1!=v2) printf(%d,%d):%dn,gej.bv,gej.tv,gej.w); setv1=v2; i+; j+;void insertsort(edgeset ge,int e) int i,j; for(i=2;i=e;i+) if(gei.wgei-1.w) ge0=gei; j=i-1;while(ge0.wgej.w) gej+1=gej; j-; gej+1=ge0;void dijkstra(int costMAXEMAXE,int distMAXE,int pathMAXE,int sMAXE,int n,int v0) int u,vn

11、um,w,wm; for(w=1;w=n;w+) distw=costv0w; if(costv0w32767) pathw=v0; vnum=1;while(vnumn-1) wm=32767; u=v0; for(w=1;w=n;w+) if(sw=0&distwwm) u=w; wm=distw; su=1; vnum+; for(w=1;w=n;w+) if(sw=0&distu+costuwdistw&costuw!=32767) distw=distu+costuw; pathw=u; void printpath1(int dist,int path,int s,int n,in

12、t v0) int i,k; for(i=1;i=n;i+) if(si=1) k=i; while(k!=v0) printf(%d-,k); k=pathk; printf(%d:%dn,k,disti); else printf(%d-%d:32767n,i,v0);void printpath2(int dist,int path,int v0,int v1) int k; k=v1;while(k!=v0) printf(%d-,k); k=pathk; printf(%d:%dn,k,distv1);main() edgeset geMAXE; int costMAXEMAXE,d

13、istMAXE,pathMAXE,sMAXE,a,n,e,i,j,k,v0,v1; printf(请输入顶点个数:); scanf(%d,&n); printf(请输入边的条数:); scanf(%d,&e); printf(请输入边的信息(起点,终点,权值):n); for(i=1;i=e;i+) scanf(%d,%d,%d,&gei.bv,&gei.tv,&gei.w); printf(在下列菜单中进行选择:n); printf(1.kruskal算法(起点,终点)权值):n); printf(2.shortpath(终点-起点):n); printf(3.shortpath betwe

14、en two point(终点-起点):n); printf(4.exit(退出):n); scanf(%d,&a);while(a!=4) switch(a)case 1:insertsort(ge,e); kruskal(ge,n,e); break;case 2:printf(请输入起始顶点序号:); scanf(%d,&v0); for(i=1;i=n;i+) for(j=1;j=n;j+) costij=32767; for(k=1;k=e;k+) i=gek.bv; j=gek.tv; costij=gek.w; for(i=1;i=n;i+) si=0; sv0=1; dijks

15、tra(cost,dist,path,s,n,v0); printpath1(dist,path,s,n,v0); break;case 3:printf(请输入起始顶点序号:); scanf(%d,&v0); printf(请输入终点序号:); scanf(%d,&v1); for(i=1;i=n;i+) for(j=1;j=n;j+) costij=32767; for(k=1;k=e;k+) i=gek.bv; j=gek.tv; costij=gek.w; for(i=1;i=n;i+) si=0; sv0=1; dijkstra(cost,dist,path,s,n,v0); pri

16、ntpath2(dist,path,v0,v1); break;printf(在下列菜单中进行选择:n);printf(1.kruskal算法(起点,终点)权值):n);printf(2.shortpath(终点-起点):n);printf(3.shortpath between two point(终点-起点):n);printf(4.exit(退出):n);scanf(%d,&a);return 1;课程设计总结:本次课程设计涉及到的范围很广,让本人能够比较系统的对C语言和数据结构进行一次整理和复习。同时有了很多的体会和经验。1. 巩固了以前学过的C语言的知识,在这次课程设计中我体会到C语

17、言超强的逻辑性,能够熟练使用VC+的编译环境,也对这两门课程有了新的认识,他们既有联系,又相互区别,在编写程序过程中要灵活应用2. 对数据结构的理解有待加强,算法的知识面也有待于提高。不同的人会选择不同的算法,所以即使同样的程序,不同的人必然会设计出不同的方案,所以以后的学习生活中,一定要广泛涉猎,掌握更多更好的解决问题的方法。3. 此次设计让我意识到程序设计是脑力劳动和体力劳动相结合的,没有平时基础的训练是不会写出高效的算法。4. 此次课程设计时间虽短,课设的过程是短暂的,但我所收获的是永恒的。它让我尝到了学习的快乐,成功的喜悦,更让我懂得了不少做人的道理。要完成一项任务或把东西学好就必须有足够的信心,持久的耐心,有面对困难无所畏惧的精神,这对我日后的学习和生活产生了深远一个影响。指导教师评语:指导教师(签字): 年 月 日课程设计成绩

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1