数据结构求有向图的所有简单回路.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文档。上传文档
查看更多
数据结构求有向图的所有简单回路

课 程 设 计 报 告 课程设计名称:数据结构课程设计 课程设计题目:求有向图的所有简单回路 院(系):计算机学院 专 业:计算机科学与技术(嵌入式方向) 班 级: 学 号: 姓 名: 指导教师: 目 录 沈阳航空航天大学 I 1 总体设计 1 1.1 课设要求 1 1.2 设计原理 1 2 详细设计 2 2.1 算法与程序的设计与实现 2 2.1.1算法描述 2 2.1.2数据结构设计及用法说明 3 2.2 流程图的设计与实现 5 3 核心数据结构函数的描述 7 3.1 建立邻接表的函数 7 3.2 深度优先遍历函数 9 4 程序测试及结果分析 11 4.1 程序测试及结果 11 参考文献 14 附 录(关键部分程序清单) 15 1 总体设计 1.1 课设要求 以合适方便的方式输入一个有向图,并在内部建立有向图的邻接表储存结构,有邻接表的形式储存有向图。然后根据有向图的储存结构,求出该有向图中所有的简单回路。输入有向图的方式简单方便,能形象方便的观察有向图的顶点名称,相关弧的关系。 要求如下: (1)熟悉图的邻接表储存结构及操作方式; (2)熟悉求简单回路的算法(利用深度优先遍历); (3)熟悉运用开发环境,基于VC++6.0的软件开发环境; (4)完成课程设计基本任务的设计及编码; (5)熟练掌握VC++6.0上的基本的调试方法。 1.2 设计原理 根据所学的知识,在利用邻接表时需要做三个工作:定义表结点类型;定义头结点类型;定义邻接表类型。再对储存的图进行深度优先遍历,并将遍历过的点进行标记,放入数组储存,当发现有被标记的点出现时则表示出现重复的顶点,为找到回路,打印出有向图的回路。 2 详细设计 2.1 算法与程序的设计与实现 在得到该课程设计任务书时,在对求有向图的所有简单回路的算法知识做了简单的回顾与学习。首先是邻接表储存有向图,由于有向边没有权值,所有在建立有向图的邻接表的时候去除了有关弧的信息。其次才用深度优先遍历的算法遍历有向图中所有的顶点,在遍历有向图时,对图中每个顶点至多调用一次DFS函数,因为一旦某个顶点被标记成为已被访问,就不再从它出发进行搜索了。因此,遍历有向图的过程实质上是对每个顶点查找其邻接点的过程。 2.1.1算法描述 (1)邻接表:邻接表是图的一种链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的接点表示依附于顶点Vi的边(对有向图是以顶点Vi为尾的弧)。每个结点由3个域组成,其中邻接点域(adjvex)指示与顶点Vi邻接的点在图中的位置,链域(nextare)指示下一条边或弧的结点;数据域(info)储存和边或弧相关的信息,如权值等。每个链表上附设一个表头结点。在表头结点中,除了设有链域(firstarc)指向链表中第一个结点之外,还设有储存顶点Vi的名或其它有关信息的数据域(data)。如下图所示: adjvex nextarc info 图2.1.1 表结点 data firstarc 图2.1.2 头结点 (2)深度优先遍历:设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标记为已访问过;然后从y开始搜索,直到搜索完从y出发的所有路径,即访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从x出发的未检测过的边。上述过程直至从x出发的所有边都已检测过为止。此时,若x不是源点,则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的顶点(即从源点可达的所有顶点)都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新源点,进行新的搜索过程。首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(称为从源点可达的顶点)均已被访问为止。.1.2数据结构设计及用法说明 (1)邻接表的形式说明及其建表算//边表结点Typedef struct ArcNode{   int adjvex;//邻接点域   struct node *next //链域   //若要表示边上的权,则应增加一个数据域 }; //顶点表结点   typedef struct vnode{   VertexType //顶点域   EdgeNode*firstarc;//指向第一条依附该顶点的弧的指针 }VertexNode; //AdjList是邻接表类型 typedef V

文档评论(0)

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

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

1亿VIP精品文档

相关文档