数据结构课程设计-图的遍历和生成树的求解实现说明书

  • 格式:doc
  • 大小:262.00 KB
  • 文档页数:23

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)//求连通分量