图的广度遍历.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图的广度遍历

图的广度遍历 1 引言 1.1 背景 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个元素只有一个直接前驱和一个直接后继。图作为一种非线性数据结构,被广泛的应用于多个技术领域,例如系统工程、化学工程、统计力学、遗传学、控制论、人工智能、编译系统等领域,在这些领域中把图结构作为解决问题的数学手段之一。可以采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储。对图的遍历采用广度优先遍历进行搜索。 图的遍历算法是求解图的连通性问题,拓扑问题和求关键路径等算法的基础。然而,图的遍历要比树的遍历复杂得多。因为图的任何一顶点都有可能和其余的顶点相邻接。所以在访问了某个顶点之后,可能沿着某条路径搜索之后,又回到该点。为了避免统一顶点被访问多次,在图的遍历过程中,必须先记下每个已访问的顶点。介绍一种对有向图和无向图都适用的遍历图的路径即为广度优先搜索。图的广度优先遍历类似于树的前序遍历,采用的遍历方法的特点是尽可能先对纵深方向进行搜索。而在遍历的过程中,可以采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储,对图的遍历采用广度优先遍历进行序列搜索。 1.2 目标 首先输入图的类型,有向或无向图(因为遍历与权值无关)。然后输入图的顶点数、边数和各条边,之后生成该图的邻接表并输出。再输入要遍历该图的起点,然后从所输入的点广度搜索该图的邻接表,并按遍历顺序输出顶点内容。之后决定是否继续遍历该图或输入另一个需要遍历的图。 2 方案论证 2.1 系统需求 图的遍历算法是求解图的连通性问题,拓扑问题和求关键路径等算法的基础。然而,图的遍历要比树的遍历复杂得多。因为图的任何一顶点都有可能和其余的顶点相邻接。所以在访问了某个顶点之后,可能沿着某条路径搜索之后,又回到该点。为了避免统一顶点被访问多次,在图的遍历过程中,必须先记下每个已访问的顶点。介绍一种对有向图和无向图都适用的遍历图的路径即为广度优先搜索。 图的广度优先遍历类似于树的前序遍历,采用的遍历方法的特点是尽可能先对纵深方向进行搜索。而在遍历的过程中,可以采用邻接矩阵、邻接表、十字链表等多种结构存储来实现对图的存储,对图的遍历采用广度优先遍历进行序列搜索。 2.2 功能需求 图是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个元素只有一个直接前驱和一个直接后继。图作为一种非线性数据结构,被广泛的应用于多个技术领域,例如系统工程、化学工程、统计力学、遗传学、控制论、人工智能、编译系统等领域,在这些领域中把图结构作为解决问题的数学手段之一。 对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索遍历。画出搜索顺序示意图。 2.3 运行环境的要求 Visual C++ 6.0和Windows XP电脑一台。 Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。 3 算法实现 3.1 算法思想 (1)邻接表 邻接表是图的一种链式存储结构。在邻接表中,对图中每个定点建立一个单链表,第i个单链表中的节点表示依附于定点vi的边。每个节点由3个域组成,其中邻接点(adjvex)指示与定点vi邻接的点在图中的位置,链域(nextarc)指示下一条边或弧的节点;数据域(info)存储和边或弧相关的信息,如权值等。每个链表上附设一个头节点。在表头节点中,除了设有链域(firstarc)指向链表中第一个节点之外,还设有存储定点vi的名或其他有关信息的数据域(data)。 (3)图的广度遍历 (a)从图中某个顶点出发,首先访问。 (b)依次访问的各个未被访问的临接点。 (c)分别从这些临接点出发,依次访问他们的各个未被访问的临接点。访问时应保证:如果和为当前端接点,且在之间被访问,则所有未被访问的临接点应在所有未被访问的临接点之前访问,重复3,直到所有端结点均没有未被访问的临接点为止。 (d)若此时还有还有顶点未被访问,则选一个未被访问的顶点作为起点,重复以上过程,直至所有顶点均被访问为止。 3.2 模块划分 基于邻接表实现图的广度遍历: (a)Status InitQueue(LinkQueue *Q)根据已知Q初始化队列 (b)Status QueueEmpty (LinkQueue Q)判断队列是否为空

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档