计本班数据结构课程设计方案研究报告《图遍历和生成树求解实现》 .docx
《计本班数据结构课程设计方案研究报告《图遍历和生成树求解实现》 .docx》由会员分享,可在线阅读,更多相关《计本班数据结构课程设计方案研究报告《图遍历和生成树求解实现》 .docx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结课程设计报告课程名称数据结构课题名称图的遍历和生成树求解实现院系信息科学与工程学院专业运算机科学与技术班级 11 计本 3 班王占凤安徽省巢湖学院运算机与信息工程学院学生姓名 李威学联系方号 11011183式指导教师2021 年 6 月 13 日可编辑资料 - - - 欢迎下载精品名师归纳总结目录一. 问题描述: 21. 图的遍历和生成树求解实现 22. 基本功能 23. 输入输出 2二、 概要设计 21. 设计思路: 22. 数据结构设计: 33. 软件结构设计: 4三、 具体设计 41. 定义程序中全部用到的数据及其数据结构,及其基本操作的实现。 4邻接矩阵定义 :52.
2、 主函数和其他函数的伪码算法。 5主函数: 53. 主要函数的程序流程图。 151. 实际完成的情形说明。 182. 程序的性能分析,包括时空分析。 183. 上机过程中显现的问题及其解决方案。184. 程序中可以改进的的方说明。18五、 测试结果 19可编辑资料 - - - 欢迎下载精品名师归纳总结六、 用户手册 22七、体会与自我评判22源代码: 22一. 问题描述:1. 图的遍历和生成树求解实现图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和
3、下一层中多个元素(及其孩子结点)相关但只能和上一层中一个元素(即双亲结 点)相关。而在图形结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。生成树求解主要利用普利姆和克雷斯特算法求解最小生成树,只有强连通图才有生成树。2. 基本功能1) 先任意创建一个图。2) 图的 DFS,BFS的递归和非递归算法的实现3) 最小生成树(两个算法)的实现,求连通重量的实现4) 要求用邻接矩阵、邻接表等多种结构储备实现3. 输入输出输入数据类型为整型和字符型,输出为整型和字符二、 概要设计1. 设计思路 :a. 图的邻接矩阵储备:依据所建无向图的结点数n, 建立 n*n 的矩阵,其中元素全
4、是无穷大( int_max ),再将边的信息存到数组中。其中无权图的边用1 表示,无边用 0 表示。有全图的边为权值表示,无边用表示。b. 图的邻接表储备:将信息通过邻接矩阵转换到邻接表中,即将邻接矩阵的每一行都转成链表的形式将有边的结点进行储备。c. 图的广度优先遍历:假设从图中的某个顶点v 动身,在拜访了 v 之后依次拜访 v 的各个未曾拜访过的邻接点,然后再拜访此邻接点的未被拜访的邻接点,并使“先被拜访的顶点的邻接点”先于“后被拜访的顶点的邻接点”被访问,直至图中全部已被拜访的顶点的邻接点都被拜访到。如此时图中仍有未被拜访的,就另选未被拜访的重复以上步骤,是一个非递归过程。可编辑资料 -
5、 - - 欢迎下载精品名师归纳总结d. 图的深度优先遍历:假设从图中某顶点v 动身,依依次拜访 v 的邻接顶点,然后再连续拜访这个邻接点的系一个邻接点,如此重复,直至全部的点都被拜访,这是个递归的过程。e. 图的连通重量:这是对一个非强连通图的遍历,从多个结点动身进行搜寻,而每一次从一个新的起始点动身进行搜寻过程中得到的顶点拜访序列恰为其连通重量的顶点集。本程序利用的图的深度优先遍历算法。2. 数据结构设计:ADT Queue数据对象: D=ai | a i ElemSet,i=1,2,3 , n,n 0 数据关系: R1=| a i-1 ,a i D,i=1,2,3, , n 基本操作:In
6、itQueue&Q操作结果:构造一个空队列 Q。QueueEmptyQ初始条件: Q为非空队列。操作结果:如 Q为空队列,就返回真,否就为假。EnQueue&Q,e初始条件: Q为非空队列。操作结果:插入元素 e 为 Q的新的队尾元素。DeQueue&Q,e初始条件: Q为非空队列。操作结果:删除 Q的队头元素,并用 e 返回其值。ADT Queue ADT Graph数据对象 V: V是具有相同特性的数据元素的集合,称为顶点集。数据关系 R: R=VRVR=|v,wV 且 P( v,w), 表示从 v 到 w的弧, 谓词 P( v,w)定义了弧 的意义或信息 基本操作 P: CreatGra
7、ph&G,V,VR。初始条件: V 是图的顶点集, VR是图中弧的集合。操作结果:按 V和 VR的定义构造图 G。BFSTraverseG,visit。初始条件:图 G存在, Visit是定点的应用函数。可编辑资料 - - - 欢迎下载精品名师归纳总结操作结果:对图进行广度优先遍历。在遍历过程中对每个顶点调用函数 Visit一次且仅一次。一旦visit()失败,就操作失败。DFSTraverseG,visit。初始条件:图 G存在, Visit是定点的应用函数。操作结果:对图进行广度优先遍历。在遍历过程中对每个顶可编辑资料 - - - 欢迎下载精品名师归纳总结点失DFStra_fenG调用函数
8、 Visit一次且仅一次。一旦visit() 败,就操作失败。可编辑资料 - - - 欢迎下载精品名师归纳总结量。ADT Graph。初始条件:图 G存在,存在图的深度优先遍历算法。操作结果:从多个顶点对图进行深度优先遍历,得到连通分可编辑资料 - - - 欢迎下载精品名师归纳总结3. 软件结构设计:main0creatMGraph_LGcre atadjgra,G1ljjzprintG2adjprintgra,G3BFSTravers egra45DFStragraDFSTraverse_fengra6MiniSpanTree_PRIMg, G.vexnum7MiniSpanTREE_KRU
9、SCALG,gra函数名creatMGraph_LG creatadjgra,GljjzprintGadjprintgra,G BFSTraversegraDFStragraDFSTraverse_fengra MiniSpanTree_PRIMg,G.vexnum MiniSpanTREE_KRUSCALG,gra返回值类型int int void void void int int intvoid三、 具体设计1. 定义程序中全部用到的数据及其数据结构,及其基本操作的实现。可编辑资料 - - - 欢迎下载精品名师归纳总结邻接矩阵定义 : typedef struct ArcCellVRTy
10、pe adj 。/VRType 是顶点关系类型。对无权图,用1 或 0 表示相邻否。对带权图,就为权值类型InfoType *info。/ 该弧相关信息的指针ArcCell,AdjMatrixmaxmax。typedef structVertexType vexsmax。/ 顶点向量AdjMatrix arcs。/ 邻接矩阵int vexnum,arcnum 。/ 图的当前顶点数和弧数MGraph_L。邻接表的定义 :typedef struct ArcNode/弧结点int adjvex。/ 该弧指向的顶点的位置struct ArcNode *nextarc。/ 指向下一条弧的指针InfoT
11、ype *info。/ 该弧相关信息的指针ArcNode。typedef struct VNode/邻接链表顶点头接点VertexType data。/ 顶点信息ArcNode *firstarc。/ 指向第一条依附该顶点的弧的指针VNode,AdjList。typedef struct/图的定义AdjList verticesmax。int vexnum,arcnum 。/ 图的当前顶点数和弧数ALGraph。队列定义 :typedef struct QNodeQElemType data。struct QNode *next。QNode,*QueuePtr 。可编辑资料 - - - 欢迎下
12、载精品名师归纳总结typedef structQueuePtr front。/ 队头指针QueuePtr rear 。/ 队尾指针LinkQueue 。2主函数和其他函数的伪码算法。主函数:int mainint s。char y=y。cout|菜单 |endl。cout|-【0、创建一个无向图 -|endl。cout|-【1、显示该图的邻接矩阵 -|endl。cout|-【2、显示该图的邻接表 -|endl。cout|-【3、广度优先遍历 -|endl。cout|-【4、深度优先遍历 -|endl。cout|-【5、最小生成树MiniSpanTree_PRIM 算法-|endl。cout|-
13、【6、最小生成树MiniSpanTree_KRUSCAL算法-|endl。cout|-【7、连通重量 -|endl。cout| |endl。whiley=ycout 请挑选菜单: s。ifs=0可编辑资料 - - - 欢迎下载精品名师归纳总结+o。ifo=2n=0。l=0 。o=0。switchscase 0:cout创建一个无向图: endl 。MGraph_L G。creatMGraph_LG 。ALGraph gra 。creatadjgra,G。break。case 1:cout邻接矩阵显示如下: endl 。ljjzprintG。break。case 2:cout邻接表显示如下: e
14、ndl 。adjprintgra,G。break。case 3:cout广度优先遍历: 。BFSTraversegra。coutendl。break。case 4:cout 深度优先遍历: 。DFStragra。coutendl。break。case 5:ifn=0cout0cout如该图为非强连通图 含有多个连通重量 时,最小生成树不存在 endl 。break 。elseint i,gmaxmax。fori=0。i.=G.vexnum 。+iforint j=0。j.=G.vexnum 。+j gi+1j+1=G.arcsij.adj。cout 普利姆算法 :endl 。MiniSpanT
15、ree_PRIMg,G.vexnum 。break 。case 6:ifn=0cout0cout该图为非强连通图 含有多个连通重量 ,最小生成树不存在 endl 。break 。elsecout 克鲁斯卡尔算法 :endl 。MiniSpanTREE_KRUSCALG,gra。break。case 7:cout连通重量 :endl 。DFSTraverse_fengra。break。coutendly。ify=n break。return 0。邻接矩阵储备:int creatMGraph_LMGraph_L &G/创建图用邻接矩阵表示char v1,v2。可编辑资料 - - - 欢迎下载精品名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图遍历和生成树求解实现 计本班数据结构课程设计方案研究报告图遍历和生成树求解实现 本班 数据结构 课程设计 方案 研究 报告 遍历 生成 求解 实现
限制150内