数据结构-实验3-图形结构及其应用案例.docVIP

数据结构-实验3-图形结构及其应用案例.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称:数据结构与算法 课程类型:必修 实验项目名称:图形结构及其应用 实验题目:图型结构的建立与遍历 设计成绩 报告成绩 指导老师 目录: 目录: 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,i,j是有向图的边 0,i,j不是有向图的边 (2)邻接表 数据成员: 基本操作: 插入边:对图中的新有向边i,j,令i,节点对应链表插入一个j 广度优先搜索 深度优先搜索(递归) 深度优先搜索(非递归) (3)队列 数据成员: 头结点:指向队首,以方便操作。 基本操作: 入队:将一个元素插入队首 出队:从队尾取出一个元素 (4)队列堆栈 数据成员: 头结点:每个头结点指向一个队列,只有堆栈顶层的头节点对应的队列才能进行出队、入队操作。 基本操作: 入栈:头结点压入堆栈 出栈:弹出头节点,对头节点对应队列进行操作 2.物理设计 (1)数据读入 有向图以边序列的形式从文件输入,共有17个顶点,30条边: I.邻接表 单元:邻接表的基本单位。每个单位包含结点序号和下一单元的指针。 邻接表:包含一个单元数组和布尔数组。 单元数组中,每个单元代表单元序号对应的结点;每个单元都是一个链表的表头;这一链表储存的是头结点可到达的结点。 布尔数组中,每个元素代表其序号对应的结点,用于记录每个结点是否已被读取。 操作——增加边:对新的有向边a,b,将b插入邻接表中a作为头结点的链表。 II.邻接矩阵 由于只是一个二维数组,因此其内容可在程序内直接调用、修改。需要进行初始化。 III.读入函数 为了方便,本程序同时将图读入邻接矩阵和邻接表。 (2)广度优先搜索 I.邻接表上的广度优先搜索 由于广度优先搜索要多次发起搜索,所以采用主从函数形式: Master:对布尔数组和搜索顺序数组进行初始化,并调用Servant进行广度优先搜索。 对每个未被从函数访问的结点,调用从函数,以其为根结点进行广度优先搜索。 把广度优先搜索结果输出到文件。 Servant:以输入结点为根结点,进行广度优先搜索。 将输入结点标记为已读,同时建立队列。 建立队列,以根据根结点为最初元素,每次出队一个元素,把这一结点可达而又未读过的结点添加到队列中,如此循环,直到队列清空。 II.邻接矩阵上的广度优先搜索 沿用主从函数形式。原理类似。 区别主要在于,每次读取根结点的可达点,依据的是邻接矩阵。 (3)深度优先搜索——递归实现 I.邻接表实现 Master: 初始化相关记录数组,并启动从函数。 Ser

文档评论(0)

ccx55855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档