版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计设计说明书图的最小生成树的实现(Kruskal算法)学生姓名学号班级成绩指导教师计算机科学与技术系2011年3月4日数据结构课程设计评阅书题目图的最小生成树的实现(Kruskal算法)学生姓名学号指导教师评语及成绩成绩:教师签名:年月曰答辩教师评语及成绩成绩:教师签名:年月曰教研室意见总成绩:室主任签名:年月曰注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。摘要设计了一种图的最小生成树的实现程序。本程序的算法按照克鲁斯卡尔算法的思想,采用图的邻接矩阵法存储图的顶点和边。纳入权值最小的边作为最小生成树的一部分,如遇回路则舍弃准备纳入的边,直到图的所有顶点被遍历。
2、该程序采用VC+作为软件开发环境,简单易行又节省时间。关键词:图;最小生成树;克鲁斯卡目录TOC o 1-5 h z HYPERLINK l bookmark2 课题描述1 HYPERLINK l bookmark4 问题分析和任务定义2 HYPERLINK l bookmark6 逻辑设计3 HYPERLINK l bookmark8 流程图4 HYPERLINK l bookmark10 程序编码7 HYPERLINK l bookmark12 程序调试结果11 HYPERLINK l bookmark14 结果分析13 HYPERLINK l bookmark16 总结14参考文献15
3、课题描述本次课程设计题目是:图的最小生成树的实现(Kruskal算法)。要求按照克鲁斯卡尔的算法思想编写一个新的程序,实现图的最小生成树的生成。Kruskal算法就是把所有的边按权值从小到大排序,然后依次把各个点加入到最小树的集合中去,但是在加入的过程中不能有回路。自主完成程序的编译与调试,画出流程图,并对此次课程设计过程中出现的问题和自己掌握的东西做一个详细的分析总结。问题分析和任务定义本课题涉及图的创建,存储及最小生成树问题。所谓最小生成树,就是给定一个无向图,挑选若干条边,连成一个树行图(无圈),使得所选边的权至和最小。该程序的算法是生成图的最小生成数,而且算法必须遵循克鲁斯卡尔思想,即
4、纳入图中权值最小的边作为最小生成树的一部分,继续纳入权值次小的边,直到图中所有顶点被遍历,如纳入边的过程中构成回路则舍弃该边,否则纳入。逻辑设计该程序主要由六大块组成,包括构造最小生成树数组、排序、交换权值、构造最小生成树、查找、还有主函数。如下图3.1所示:图的最小生成树的实现(Kruskal算法)构造最小生成树数组交换权值构造最小生成树图3.1程序模块图1 4流程图该程序的流程图如图4.1所示:i=1T.ivexnumjvexnumJ+l+i=1iarcnumYI+-Y-J=1SidebySideNiprintf(”邻接矩阵为:n);inti,j,n,m;beginG-Aarqijtl.a
5、djhGarcji.adj=O:SidebySide图4.1流程图 1)图4.2流程图Yf=parentf;returnf; 5程序编码#include#include#defineM20#defineMAX20typedefstructintbegin;intend;intweight;edge;typedefstructintadj;intweight;AdjMatrixMAXMAX;typedefstructAdjMatrixarc;intvexnum,arcnum;MGraph;voidCreatGraph(MGraph*);/函数申明voidsort(edge*,MGraph*);v
6、oidMiniSpanTree(MGraph*);intFind(int*,int);voidSwapn(edge*,int,int);voidCreatGraph(MGraph*G)/构件图inti,j,n,m;printf(请输入边数和顶点数:);scanf(%d%d,&G-arcnum,&G-vexnum);for(i=1;ivexnum;i+)/初始化图for(j=1;jvexnum;j+)G-arcij.adj=G-arcji.adj=0;for(i=1;i=G-arcnum;i+)/输入边和权值printf(n请输入有边的2个顶点);scanf(%d%d,&n,&m);while(
7、n0|nG-vexnum|marcnm.adj=G-arcmn.adj=1;getchar();printf(n请输入%d与宀之间的权值:,n,m);scanf(%d,&G-arcnm.weight);printf(邻接矩阵为:n);for(i=1;ivexnum;i+)for(j=1;jvexnum;j+)printf(%d,G-arcij.adj);printf(n);voidsort(edgeedges,MGraph*G)/对权值进行排序inti,j;for(i=1;iarcnum;i+)for(j=i+1;jarcnum;j+)if(edgesi.weightedgesj.weight
8、)Swapn(edges,i,j);printf(权排序之后的为:n);for(i=1;iarcnum;i+)edgesi.end,printf(%dn,edgesi.begin,edgesi.weight);voidSwapn(edge*edges,inti,intj)/交换权值以及头和尾inttemp;temp=edgesi.begin;edgesi.begin=edgesj.begin;edgesj.begin=temp;temp=edgesi.end;edgesi.end=edgesj.end;edgesj.end=temp;temp=edgesi.weight;edgesi.weig
9、ht=edgesj.weight;edgesj.weight=temp;voidMiniSpanTree(MGraph*G)/生成最小生成树inti,j,n,m;intk=1;intparentM;edgeedgesM;for(i=1;ivexnum;i+)for(j=i+1;jvexnum;j+)if(G-arcij.adj=1)edgesk.begin=i;edgesk.end=j;edgesk.weight=G-arcij.weight;k+;sort(edges,G);for(i=1;iarcnum;i+)parenti=0;printf(最小生成树为:n);for(i=1;i=G-a
10、rcnum;i+)/核心部分n=Find(parent,edgesi.begin);m=Find(parent,edgesi.end);if(n!=m)parentn=m;edgesi.end,printf(0)f=parentf;returnf;intmain(void)/主函数MGraph*G;G=(MGraph*)malloc(sizeof(MGraph);if(G=NULL)printf(memoryallcationfailed,goodbye);exit(1);CreatGraph(G);MiniSpanTree(G);system(pause);return0; 6程序调试结果程
11、序调试结果如图6.1,图6.2所示:图6.1结果运行图图6.2结果运行图7结果分析程序运行过程中出现的问题主要有:调试过程中必须以正确的格式输入图的顶点,以及边的相关信息。必须要把与一个顶点相关的所有边输入结束再换下一个顶点,不能按任意方式输入。否则将造成程序调试出错,无法达到预期的目的。该程序是以邻接矩阵的方法创建和存储图的信息,必须要熟悉并掌握邻接矩阵的相关知识,才能有效减少编程过程中出现不必要的麻烦和错误。克鲁斯卡尔算法的时间复杂度为O(eloge).8总结Kruskal算法就是把所有的边按权值从小到大排序,然后依次把各个点加入到最小树的集合中去,但是在加入的过程中要判断是否有回路。唯一困难的问题就是这个,怎么判断有没有回路?用一个简单的标记方法。开辟一个新数组,大小和图中点的个数一样多,并初始化为点的对应标号。这个数组是记录该点已经在哪颗树当中。开始的时候自然是自己独立的一颗树,在每次加入一条边的时候,判断这条边的2个点在数组中记录的树时候是一样的,如果一样,那就说明是在同一颗树中,如果加入了会有回路,所以这条边不能加入。而如果不同,那就把这2个点中其中一个点的权值变成另一个点的权值,表示在同一颗树中,这样,便解决了该问题。经过两个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国自卸汽车市场专项调查分析及投资前景预测报告
- 2026年中国纺织机械行业现状分析与发展前景研究报告
- 高效隔油箱行业深度研究报告
- 检验科质量管理体系构建方案
- 人防工程施工进度管理方案
- 基于BIM的数字孪生技术在水利中的应用研究
- 兄弟房子合同协议书
- 全款买新车合同范本
- 代理职称评审协议书
- 代管孩子存款协议书
- 2025年辅警考试综合试题及答案
- 2025年泰安市公开招聘劳务派遣制工会社会工作者(52人)笔试考试参考试题及答案解析
- 2025年低空经济「城市安全」无人机监控与巡查报告
- 七年级语文第三次月考卷(全解全析)(安徽专用)
- 铝合金铸造工艺流程详解
- 事业单位会计专业考试重点题解
- 2025年秋统编版小学语文四年级上册期中考试测试卷及答案(共三套)
- 浙江省天域全国名校协作体2026届高三上学期10月联考技术试题(含答案)
- 外卖骑手心理健康现状与干预策略
- 新能源汽车技术职业生涯规划
- FZ∕T 62045-2021 棉睡袋
评论
0/150
提交评论