数据结构课程设计最小生成树的构建实验报告.docx_第1页
数据结构课程设计最小生成树的构建实验报告.docx_第2页
数据结构课程设计最小生成树的构建实验报告.docx_第3页
数据结构课程设计最小生成树的构建实验报告.docx_第4页
数据结构课程设计最小生成树的构建实验报告.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

数据结构课程设计 题目二:最小生成树的构建学院:XXXXXXXXXXX班级:XXXXXXXXXXX学号:XXXXXXXXXXX姓名:XXXXXXXXXXX设计时间: XXXXXXXXXXX目录:1. 需求分析- 12. 课题设计内容- 1(1)课程设计基本流程- 1 (2)详细设计说明- 1 (3)界面操作流程图:- 2 (4)主要程序- 3(5)运行结果截图- 53.得意之处- 64.设计实践过程中的收获与体会- 65.设计目前存在的问题- 76.主要参考文献- 7 一、 需求分析 本课程主要是完成一个最小生成树的构建,要求用克鲁斯卡尔算法或者普利姆算法求网的最小生成树(此程序我用的是普利姆算法),并输出各条边及他们的权值。要求用户在使用时可以准确输入顶点及每个顶点的关系,运算出可以建立的关系网,最后利用普利姆算法准确输出最短路径。二、 课程设计内容1、 课程设计基本流程:关于此课程的设计,是从设计要求入手的。根据对知识的掌握程度,我选择了用普利姆算法进行设计。根据实验要求,我定义了一个prims类,在类中定义一个私有成员函数和一个公有成员函数。定义相关变量和相关函数,并完善程序。2、 详细设计说明:首先在私有成员private中定义节点个数n、图中边的个数g,树的边的个数t,源节点s。定义二维数组graph_edge994和tree_edge994,分别为图的边和树的边。因为普利姆算法是把图分为两部分进行运算,所以我定义了T150,t1为第一部分, T250,t2为第二部分。在公有成员public中定义输入函数input ()、算法函数algorithm()、输出函数output()。 1在input中进行界面的设计,定义图中边的个数g的初始值为0,利用for循环实现边的权值的输入,嵌套if语句定义图的顶点i,j;边的权值w。用for循环完成图中可以建立关系网的输出。在algorithm中构造算法,将图的两部分进行运算,利用while循环找出最短路径,其中嵌套for循环和if语句。在output中打印挑选出的边及其对应的权值。最后,设计主函数并完善界面。3、 界面操作流程图:菜单输入顶点个数n输入边的权值w输出挑出的边及其对应的权值显示关系网 24、 主要程序:#includeclass primsprivate:int n; /节点的个数int graph_edge994; /图的边int g; /图中边的个数int tree_edge994; /树的边int t; /树的边的个数int s; /源节点/把图分成两个部分int T150,t1; / 第一部分int T250,t2; /第二部分public:void input();int findset(int);void algorithm();void output();void prims:input()cout*nendl;cout*欢迎使用*endl;cout*普里姆算法运算*n;cout*n;coutn;g=0;/图中边的个数初始值为0cout输入边的权值 :n;for(int i=1;i=n;i+)for(int j=i+1;j=n;j+)cout i , j :;int w; 3cinw;if(w!=0)g+;graph_edgeg1=i;/定义图的顶点igraph_edgeg2=j;/定义图的顶点jgraph_edgeg3=w;/定义边的权值w/输出图的边coutnn图中顶点可以建立的关系网:n;for(i=1;i=g;i+)cout graph_edgei1 , graph_edgei2 endl;int prims:findset(int x)for(int i=1;i=t1;i+)if(x=T1i)return 1;for(i=1;it2;i+)if(x=T2i)return 2;return -1;void prims:algorithm()/构造算法t=0;/初始化边的个数为0t1=1;T11=1; /资源节点t2=n-1;int i;for(i=1;i=n-1;i+) 4T2i=i+1; coutnn*运算开始*nnn;while(g!=0 & t!=n-1)/ 找出最短路径int min=99;int p;int u,v,w;for(i=1;igraph_edgei3)min=graph_edgei3;u=graph_edgei1;v=graph_edgei2;w=graph_edgei3;p=i;/删除图的边for(int l=p;lg;l+)graph_edgel1=graph_edgel+11;graph_edgel2=graph_edgel+12;graph_edgel3=graph_edgel+13;/增加树的边t+;tree_edget1=u;tree_edget2=v;tree_edget3=w; 5void prims:output()cout挑选出的边及其对应的权值:n;for(int i=1;i=t;i+)couttree_edgei1,tree_edgei2 :tree_edgei3endl;int main()prims obj;obj.input();obj.algorithm();obj.output();return 0;5、 运行结果截图: 5三、 得意之处这次课程设计的课题虽然比较简单,但是每个函数的编写都花了很大的心思。之前有去过之前有去过图书馆查资料、也上网看到了一些,但有很多地方还是不太明白,有些语句通过自己能理解的方式进行了改进,比如for循环语句和if语句的编写等。在编写过程中,比较得意的地方还是用普利姆算法将图分为两个部分的代码的编写,还有可以准确的显示可以建立的关系网,当运行出现bug后,自己又认真修改,解决问题,心情非常喜悦。另外,我最满意的地方就是在运算完成后,可以准确的输出最短路径及其对应的权值,整个界面设计的简单但不失美观,同时方便用户的使用,增加了友好性。四、 设计实践过程中的收获与体会这一星期的课程设计中确实让我增长了不少,也发现自己对于数据结构的知识掌握不够,学得不够好。自己上网看了一些程序,但都不太懂,而且都是用C语言编写的,所以,我去图书馆查了些资料,还是很有帮助的。对于if语句、for循环语句和while语句我还是查了查C+的书一点一点修改的。其中有一些句子是照着参考资料写的,自己也不太懂。但是经过努力和同学的帮助还是总算没有bug了。 6五、 设计目前存在的问题目前这个程序还有很多不足,比如界面太

温馨提示

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

评论

0/150

提交评论