数据结构图的遍历实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:图的遍历的实现

完成日期:2011.12.22

一、需求分析

1.本演示程序中,输入的数据类型均为整型数据,不允许输入字符等其他数据类型,且需要按照提示内容进行输入,成对的关系数据必须在所建立的图中已经存在对应的结点。

2.演示程序以用户和计算机的对话方式执行,在计算机终端上显示的提示信息的说明下,按照要求输入数据,运算结果在其后显示。

3.本程序实现分别基于邻接矩阵和邻接表存储结构的有、无向图,有、无向网的建立和遍历。遍历分DFS和BFS两种算法,并分别以递归和非递归形式实现。

4.测试数据:

(1)无向图结点数 4 弧数 3 结点:1 2 3 4 结点关系:1 2;1 3;2 4

(2)有向图结点数 6 弧数 6 结点:1 2 3 4 5 6 结点关系:1 2;1 3;2 4;3 5;

3 6;2 5

二、概要设计

为实现上述程序功能,图的存储结构分为邻接矩阵和邻接表两种。遍历过程中借助了栈和队列的存储结构。

1.邻接矩阵存储结构的图定义:

ADT mgraph{

数据对象V:V是具有相同特性的的数据元素的集合,成为顶点集。

数据关系 R:

R={VR}

VR={ | v,w є V且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息 }

基本操作 P:

locatevex(G, mes);

初始条件:图G存在,mes和G中顶点有相同的特征。

操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。

createudn( & G);

初始条件:图G 存在。

操作结果:创建无向图。

createdn( & G);

初始条件:图G 存在。

操作结果:创建有向图。

createudg( & G);

初始条件:图G 存在。

操作结果:创建无向网。

createdg(& G);

初始条件:图G 存在。

操作结果:创建有向网。

DFS(G,v);

初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。

操作结果:深度优先搜索遍历图G,访问顶点时使用函数visit.

BFS(G,v);

初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。

操作结果:广度优先搜索遍历图G,访问顶点时使用函数visit.

visit( a);

初始条件:a为图中的某个顶点值。

操作结果:访问顶点a,本程序中作用结果为输出顶点值。

}ADT mgraph

2.邻接表存储结构的图定义:

ADT algraph{

数据对象V:V是具有相同特性的的数据元素的集合,成为顶点集。

数据关系 R:

R={VR}

VR={ | v,w є V且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息 }

基本操作 P:

locatevex(G, mes);

初始条件:图G存在,mes和G中顶点有相同的特征。

操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。

createudn( & G);

初始条件:图G 存在。

操作结果:创建无向图。

createdn( & G);

初始条件:图G 存在。

操作结果:创建有向图。

createudg( & G);

初始条件:图G 存在。

操作结果:创建无向网。

createdg(& G);

初始条件:图G 存在。

操作结果:创建有向网。

DFS(G,v);

初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。

操作结果:深度优先搜索遍历图G,访问顶点时使用函数visit.

BFS(G,v);

初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。

操作结果:广度优先搜索遍历图G,访问顶点时使用函数visit.

visit( a);

初始条件:a为图中的某个顶点值。

操作结果:访问顶点a,本程序中作用结果为输出顶点值。

}ADT algraph

3.主程序流程:

定义并创建图

status creatgraph(mgraph & G)

{

cout<<"请选择构造的图的类型:( 1:有向图,2:有向网,3:无向图,4:无向网)"

<

int kind;

scanf("%d",& kind);

switch (kind)//通过选择确定创建哪一种图;

{

case 1: return createdg(G);

case 2: return createdn(G);

case 3:return createudg(G);

case 4: return createudn(G);

default: return error;

}

}

然后采用DFS或BFS进行遍历(访问结果为输出顶点值)。

4.函数的调用关系图:

main

visit locatevex linkqueue enqueue gethead dequeue destroyqueue

相关文档
最新文档