用C 解决图的遍历和生成树问题.docVIP

  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文档。上传文档
查看更多
PAGE 用C++解决图的遍历和生成树问题 第 PAGE 16 页 共 NUMPAGES 24 页 用C++语言解决图的遍历和生成树问题 学生姓名:吕雪维 指导老师:罗曼莎 摘 要 本课程设计主要解决数据结构中,当输入一个无向连通图时对图进行深度遍历和广度遍历以及图在系统中的存储方式为邻接矩阵,最后求出该图的生成树(主要用了Prim算法)。在课程设计中,系统开发平台为Windows XP,程序设计语言采用C++,在DOS下显示结果,程序运行平台为Windows 98/2000/XP。对于图的遍历采用了广度优先遍历方式,在求最小生成树时用了Prim算法。在程序设计中,充分利用数据结构的优点对数据的存储方式和求解方法经行了合理优化。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用于解决实际问题。 关键词 数据库;C++;图的遍历;生成树 1 引 言 现代生活中有很多关于图的实际的求解问题,其中最主要的就是图的深度遍历、广度遍历问题和生成树的求解问题,所以对于我们来说掌握如何对给定的一个图进行遍历和生成树的求解方法非常很重要。本课程设计采用广度优先方法对图进行遍历,在生成树的求解时用了Prim算法充分体现了这种算法的优势性和实用性。本系统基于以上技术以直观的界面和方便易操作的设计思想设计了该系统。 课程设计目的 理解图的基本概念;图的抽象数据类型;图的基本概念和图的存储表示。 掌握图的存储表示:邻接矩阵 掌握图的深度和广度优先遍历算法 学会最小生成树算法,构造最小生成树的Prim方法 课程设计背景 在线性结构中,数据元素之间仅具有线性关系,每个数据元素最多只有一个前驱和一个后继;在树结构中,结点之间具有层次关系,每个结点最多只有一个双亲,但可以有许多个孩子;图结构是一种比树结构更复杂的非线性结构,在土结构中,任意两个顶点之间都可能有关系。因此,图结构具有几极强的表达能力,课用于描述各种复杂的数据对象。 1.3问题描述 为了更好地学习数据结构课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础。运用所学知识,上机解决典型问题,通过分析、设计、编码、调试等各环节的训练,使我深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,掌握线性链表、树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 实现图的遍历、求生成树等的相关操作。通过该题目的设计过程,可以加深理解图、顺序表的逻辑结构、存储结构,掌握与与图相关基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,进一步培养学生的动手能力。 课程设计内容和要求 2.1课程设计内容 该课题要求以邻接矩阵的方式存储图,实现深度、广度两种遍历,并且生成最小生成树。 2.2图的邻接矩阵的建立 对任意无向图(顶点和边数自定),根据邻接矩阵的存储结构建立图的邻接矩阵。 2.3图的遍历的实现 图的遍历包括图的广度优先遍历与深度优先遍历。对于广度优先遍历应利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)来实现。首先建立一空队列,从初始点出发进行访问,当被访问时入队,访问完出队。并以队列是否为空为循环控制条件。对于深度优先遍历则采用递归或非递归算法来实现。 2.4最小生成树的实现 生成树的定义:若从图的某顶点出发,可以系统地访问到图中所有顶点,则遍历时经过的边和图的所有顶点所构成的子图,称作该图的生成树。(此定义不仅仅适用于无向图,对有向图同样适用。) 最小生成树:如果连通图是一个网络,称该网络中所有生成树中权值总和最小的生成树为最小生成树 ( 也称最小代价生成树 )。 2.5运行环境 该程序的运行环境为Windows xp系统,Microsoft Visual C++6.0版本 数据结构设计 3.1图的深度优先遍历过程图 假使从顶点a出发进行搜索,在访问了顶点a之后,选择邻接点c,因为c未被访问,则从c出发进行搜索。依次类推,接着从b、d出发进行搜索。在访问了d之后,由于d的邻接点已被访问,则搜索回到b。访问了b之后,选择邻接点d,因为d未被访问,则从d出发进行搜索。依次进行下去,得到的顶点访问次序为;a c b d g f e a a c d e f b g 图3-1图的深度优先遍历过程图 3.2图的广度优先遍历过程图 首先访问o和o的邻接点1、2、8,然后依次访问1的邻接点7,2的邻接点3,8的邻接点5,最后访问5的邻

文档评论(0)

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

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

1亿VIP精品文档

相关文档