数据结构课程设计--图的遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计--图的遍历
内蒙古科技大学
本科生课程设计论文
题目:图的遍历
2013年07月05日
内蒙古科技大学课程设计任务书
目录
第一章图的遍历原理5
1.1总述6
1.2深度优先遍历6
1.3广度优先遍历
6
第二章需求分析7
第三章总体设计 (7)
3.1程序设计思路 (7)
3.2 功能视图 (8)
第四章类的设计 (8)
4.1 GraphUDN类的设计 (9)
4.2 Queue类的设计 (10)
第五章详细设计 (10)
5.1 工程视图和类视图 (10)
5.2 主要算法的流程图 (11)
5.2.1 主函数的流程图 (11)
5.2.2 深搜流程图 (12)
5.2.3 广搜流程图 (13)
第六章测试 (14)
6.1 菜单界面 (15)
6.2 创建无向网 (15)
6.3 输出图 (16)
6.4 输出顶点V的第一个邻接点 (16)
6.5 输出顶点V的下一个邻接点 (17)
6.6 深搜 (17)
6.7 广搜 (18)
第七章总结 (18)
附录:程序代码 (20)
参考文献 (29)
第一章图的遍历原理
1.1总述
图的遍历:从图中某一顶点出发访遍图中其余顶点,且使得每一个顶点仅被访问一次。这一过程就叫做图的遍历。
1.2深度优先遍历
深度优先遍历类似于树的先根遍历,是树的先根遍历的推广。
假如初始状态是图中所有顶点未曾被访问,则深度优先遍历可从图中某个顶点V出发,访问此顶点,然后依次从V的未被访问的邻接点出发深度优先遍历图,直到图中所有和V有路径相通的顶点都被访问到;若图中此时尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直到图中所有顶点都被访问到为止。
以图1.1为例,假如从顶点V1出发进行搜索,在访问了顶点V1之后,选择邻接点V2。因为V2未曾访问,则从V2出发进行搜索。以此类推,接着从V4,V8,V5出发进行搜索。在访问了V5之后,由于V5的邻接点都已被访问,则搜索回到V8。由于同样的理由,搜索回到V4,V2直到V1,此时由于V1的另一个邻接点未被访问,则搜索又从V1到V3,再继续进行下去。由此,得到的顶点访问序列为:
V1—V2—V4—V8—V5—V3—V6—V7
1.3广度优先遍历
广度优先遍历类似于树的按层次遍历的过程。
假如从图中某顶点V出发,在访问了V之后依次访问V的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直到图中所有已被访问的顶点的邻接点都被访问到。若图中此时尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直到图中所有顶点都被访问到为止。
以图1.1为例,首先访问V1和V1的邻接点V2和V3,然后依次访问V2的邻接点V4和V5及V3的邻接点V6和V7,最后访问V4的邻接点V8。由于这些顶点的邻接点均已被访问,并且图中所有顶点都被访问,由此完成图的遍历。得到的顶点访问序列为:
V1—V2—V3—V4—V5—V6—V7—V8
第二章需求分析
要求设计类(或类模板)来描述图,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数:
❖输入图、输出图
❖求图中顶点V的第一个邻接点
❖求图中顶点V的下一个邻接点
❖深度优先遍历图
❖广度优先遍历图
并设计主函数测试该类(或类模板)。
第三章总体设计
3.1程序设计思路
本系统有六个基本功能:输入图,输出图,求图中顶点V的第一个邻接点,求图中顶点V的下一个邻接点,深度优先遍历图,广度优先遍历图。
输入图:首先需输入顶点数及边数,然后根据顶点数确定矩阵大小,再根据边数输入对应的两点及权值。
输出图:先输出有所有边及对应的权值,再输出矩阵。
求图中顶点V的第一个邻接点:通过输入顶点v就可以输出其第一个邻接点。
求图中顶点V的下一个邻接点:通过输入顶点v及另一点,就可以从该位置的下一个位置开始,找到顶点V的下一个邻接点。
深度优先遍历图:由1.1所述可知,图的深度优先遍历显然是一个递归的过程。为了在遍历过程中便于区分顶点是否被访问过,需要附设一个访问标志数组,其初始值为false,一旦某个顶点被访问,则将其相应的分量置为true。
广度优先遍历图:由1.2所述可知,和深度优先遍历类似,在广度优先遍历的过程中也需要一个访问标志数组。并且为了顺次访问路径长度为2,3,……的顶点,需要附设队列以存储已被访问的路径长度为1,2,……的顶点。
3.2 功能视图
本程序主要包含六个功能,即图的创建,输出,访问顶点V的第一个和下一个邻接点,以及深搜和广搜。其功能视图如图2.1所示。
无向图的实
现
创建无向图输出无向图访问邻接顶
点
访问下一个
邻接顶点
深度优先遍
历
广度优先遍
历图3.1功能视图
第四章类的设计
4.1 GraphUDN类的设计
GraphUDN类包括:1.私有的数据成员,其中有顶点访问标志,顶点集,邻接矩阵,顶点数就边数 2.公有的成员函数,其中有创建输出图,输出顶点V的第一个和下一个邻接点,以及深搜和广搜。具体见以下程序段:classGraphUDN {
public:
GraphUDN ();
void create(); //创建图
void showGraph(); //输出图
intfirstAdjvex(int v); //输出v的第一个邻接顶点
intnextAdjvex(int v, int w); //输出下一个邻接顶点
void dfsTravel(); //深度优先遍历
voiddfs(int v);
void bfsTravel(); //广度优先遍历
private:
bool visited[MAX_VERTEX_NUM]; //顶点访问标志
int vexs[MAX_VERTEX_NUM]; //顶点集
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵
intvexNum;
intarcNum;
};