数据结构课程设计-图的遍历和生成树的求解实现说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年春季学期
算法与数据结构课程设计
题目:图的遍历和生成树的求解实现
专业班级:计算机科学与技术
姓名:***
学号:1234567
指导教师:****
成绩:
目录
摘要 (3)
前言 (4)
正文 (5)
1.问题描述: (5)
2.采用类C语言定义相关的数据类型 (5)
3.各模块流程图及伪码算法 (6)
4.函数的调用关系图 (8)
5.调试分析 (9)
1.调试中遇到的问题及对问题的解决方法 (9)
2.算法的时间复杂度和空间复杂度 (9)
6.测试结果 (10)
参考文献 (14)
图是一种复杂的非线性数据结构,一个图G(Grah)由两个集合V和E
构成,图存在两种遍历方式,深度优先遍历和广度优先遍历,广度优先遍历基本思路是假设从图中某顶点U出发,在访问了顶点U之后依次访问U的各个未访问的领接点,然后分别从这些领接点出发依次访问他们的领接点,并使先访问的顶点的领接点先于后访问的顶点被访问。直至所有领接点被访问到。深度优先的基本思路是从某个顶点出发,访问此顶点,然后依次从V的未被访问的领接点出发深度优先检索土。直至图中所有顶点都被访问到。PRIM算法—KRUSKAL算法;可以对图形进行最小生成树的求解。
主要问题是:
(1)当给出一个表达式时,如何创建图所表达的树,即相应的逻辑结构和存储结构?
(2)表达式建立好以后,如何求出其遍历?深度优先和广度优先遍历。
(3)计算它的最小生成树?主要是prim算法和kruscal算法两种形式。
很多涉及图的操作的算法都是以图的遍历操作为基础,通过遍历的演示,方便在学习中更好的理解突地遍历的过程。
通过对图的深度优先遍历和广度优先遍历的演示,分别两种遍历的不同与其优缺点。
我们在对一些问题进行求解时,会发现有些问题很难找到规律,或者根本无规律可寻。对于这样的问题,可以利用计算机运算速度快的特点,先搜索查找所有可能出现的情况,再根据题目条件从所有可能的情况中,删除那些不符合条件的解。
在深度优先搜索算法中,是深度越大的结点越先得到扩展。如果在搜索中把算法改为按结点的层次进行搜索,本层的结点没有搜索处理完时,不能对下层结点进行处理,即深度越小的结点越先得到扩展,也就是说先产生的结点先得以扩展处理,这种搜索算法称为广度优先搜索法。很多问题都可以用广度优先搜索进行处理,如翻币问题、最短路径问题等。
在计算机中,有多种方法存储图的信息,由于图的结构复杂,使用广泛,一般应根据实际的应用,选择适合的表示方法。常用的图的存储结构有邻接矩阵、邻接多重表和邻接表。
在实际问题当中,经常遇到这类问题,为新建的某个机构进行选址,道路交通路线,如何走完所有路线,旅游线路等一系列问题都涉及到图的知识。图是一种复杂的非线性数据结构,一个图G(Grah)由两个集合V和E。
构成,图存在两种遍历方式,深度优先遍历和广度优先遍历,广度优先遍历基本思路是假设从图中某顶点U出发,在访问了顶点U之后依次访问U的各个未访问的领接点,然后分别从这些领接点出发依次访问他们的领接点,并使先访问的顶点的领接点先于后访问的顶点被访问。直至所有领接点被访问到。深度优先的基本思路是从某个顶点出发,访问此顶点,然后依次从V的未被访问的领接点出发深度优先检索图。直至图中所有顶点都被访问到。PRIM算法—KRUSKAL算法;可以对图形进行最小生成树的求解。
树型结构是一种非线性结构,它用于描述数据元素之间层次关系,如人类社会的族谱等,树型结构的应用非常广泛,磁盘文件目录结构就是一个典型的例子。
1.问题描述:
图是一种复杂的非线性数据结构,一个图G(Grah)由两个集合V和E
构成,图存在两种遍历方式,深度优先遍历和广度优先遍历,广度优先遍历基本思路是假设从图中某顶点U出发,在访问了顶点U之后依次访问U的各个未访问的领接点,然后分别从这些领接点出发依次访问他们的领接点,并使先访问的顶点的领接点先于后访问的顶点被访问。直至所有领接点被访问到。深度优先的基本思路是从某个顶点出发,访问此顶点,然后依次从V的未被访问的领接点出发深度优先检索土。直至图中所有顶点都被访问到。PRIM算法—KRUSKAL算法;可以对图形进行最小生成树的求解。
2.采用类c语言定义相关的数据类型
#define int_max 10000 //定义邻接矩阵最大值10000为无穷大
#define max 20 //最大顶点个数
typedef struct //开始对邻接表或图进行定义
{
char vexs[20]; //顶点数的名称
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum //图中顶点数和边数
int creatMGraph_L(MGraph_L &G)//创建图用邻接矩阵表示
int visited[max]; //访问标记
typedef struct arcnode //弧结点
int adjvex; //该弧指向的顶点的位置,即边或弧依赖的顶点序号
char *info; // 该弧信息
char data; //结点信息
基本操作:
int creatadj(algraph &gra,MGraph_L G)//用邻接表存储图
int initqueue(linkqueue &q)//初始化队列
int enqueue(linkqueue &q,int e)//入队
int dequeue(linkqueue &q,int &e)//出队
int queueempty(linkqueue q)//判断队为空
void bfstra(algraph gra)//广度优先遍历
int bfstra_fen(algraph gra)//求连通分量