数据结构-实验3-图形结构及其应用

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

哈尔滨工业大学计算机科学与技术学院

实验报告

课程名称:数据结构与算法

课程类型:必修

实验项目名称:图形结构及其应用实验题目:图型结构的建立与遍历

目录:

目录: (2)

一、实验目的 (3)

二、实验要求及实验环境 (3)

1.实验内容: (3)

2.实验要求: (3)

3.实验环境 (3)

三、设计思想 (4)

1.逻辑设计 (4)

(1)邻接矩阵 (4)

(2)邻接表 (4)

(3)队列 (5)

(4)队列堆栈 (5)

2.物理设计 (6)

(1)数据读入 (6)

(2)广度优先搜索 (9)

(3)深度优先搜索——递归实现 (12)

(4)深度优先搜索——非递归实现 (14)

四、测试结果 (17)

初始化与图的读入 (17)

展示邻接表读入结果 (17)

展示邻接矩阵读入结果 (18)

初始提示 (18)

提示输入指令: (18)

非法输入 (19)

广度优先搜索 (19)

深度优先搜索:二层选择 (19)

-递归深度优先搜索 (20)

-非递归深度优先搜索 (20)

展示:二层选择 (20)

-展示邻接表读入结果(同前) (20)

-展示邻接矩阵读入结果(同前) (20)

退出及退出确认 (21)

五、系统不足与经验体会 (21)

六、附录: (21)

源代码:main.cpp (21)

输入 (21)

输出 (21)

一、实验目的

通过实现图形结构,掌握逻辑结构、储存结构及其应用。

二、实验要求及实验环境

1.实验内容:

树型结构的建立与遍历:

图的遍历(搜索)算法是图型结构算法的基础,本实验要求编写程序演示图的存储结构的建立和遍历(搜索)过程。

2.实验要求:

(1)能够建立(有向和无向)图的邻接矩阵和邻接表存储结构

(2)能够在邻接矩阵和邻接表存储结构上对(有向和无向)图进行深度优先(递归和非递归都要求)和广度优先搜索

(3)能够存储和显示相应的搜索结果(深度优先或广度优先生成森林(或生成树)、深度优先或广度优先序列和编号)

(4)以文件形式输入图的顶点和边,并显示相应的结果。要求顶点不少于10个,边不少于13个

(5)软件功能结构安排合理,界面友好,便于使用

3.实验环境

Microsoft Windows7, Code::Blocks 10.05

三、设计思想

1.逻辑设计

(1)邻接矩阵

一个|V|×|V|的二维数组AM,满足:

AM[i][j]= 1,是有向图的边

0,不是有向图的边

(2)邻接表

数据成员:

基本操作:

插入边:对图中的新有向边,令i,节点对应链表插入一个j 广度优先搜索

深度优先搜索(递归)

深度优先搜索(非递归)

(3)队列

数据成员:

头结点:指向队首,以方便操作。

基本操作:

入队:将一个元素插入队首

出队:从队尾取出一个元素

(4)队列堆栈

数据成员:

头结点:每个头结点指向一个队列,只有堆栈顶层的头节点对应的队列才能进行出队、入队操作。

基本操作:

入栈:头结点压入堆栈

出栈:弹出头节点,对头节点对应队列进行操作

2.物理设计

(1)数据读入

有向图以边序列的形式从文件输入,共有17个顶点,30条边:

I.邻接表

单元:邻接表的基本单位。每个单位包含结点序号和下一单元的指针。

邻接表:包含一个单元数组和布尔数组。

单元数组中,每个单元代表单元序号对应的结点;每个单元都是一个链表的表头;这一链表储存的是头结点可到达的结点。

布尔数组中,每个元素代表其序号对应的结点,用于记录每个结点是否已被读取。

操作——增加边:对新的有向边,将b插入邻接表中a作为头结点的链表。

II.邻接矩阵

由于只是一个二维数组,因此其内容可在程序内直接调用、修改。需要进行初始化。

III.读入函数

为了方便,本程序同时将图读入邻接矩阵和邻接表。

(2)广度优先搜索

I.邻接表上的广度优先搜索

由于广度优先搜索要多次发起搜索,所以采用主从函数形式:

Master:对布尔数组和搜索顺序数组进行初始化,并调用Servant进行广度优先搜索。对每个未被从函数访问的结点,调用从函数,以其为根结点进行广度优先搜索。

把广度优先搜索结果输出到文件。

Servant:以输入结点为根结点,进行广度优先搜索。

将输入结点标记为已读,同时建立队列。

建立队列,以根据根结点为最初元素,每次出队一个元素,把这一结点可达而又未读过的结点添加到队列中,如此循环,直到队列清空。

II.邻接矩阵上的广度优先搜索

沿用主从函数形式。原理类似。

区别主要在于,每次读取根结点的可达点,依据的是邻接矩阵。

(3)深度优先搜索——递归实现

I.邻接表实现

Master:

初始化相关记录数组,并启动从函数。Servant:

相关文档
最新文档