数据结构课设有向图强连通分量求解.docVIP

数据结构课设有向图强连通分量求解.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文档。上传文档
查看更多
数据结构课设有向图强连通分量求解

沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:数据结构课程设计 课程设计题目:有向图强连通分量求解 院(系):计算机学院 专 业: 网络工程 班 级: 学 号: 姓 名: 指导教师: 目 录 1 算法分析 2 1.1假设条件 2 1.2算法描述 2 1.2.1 有向图的存储结构 2 1.2.2 深度优先遍历 3 1.2.3 求解强连通分量 3 2 系统设计 4 2.1设计说明 4 2.2数据结构描述 4 2.3 main()函数 5 2.4邻接表和逆邻接表的建立 7 2.5邻接表的遍历 8 2.6逆邻接表的遍历 9 3 系统实现 12 3.1错误分析 12 3.2实现结论 12 参考文献 13 附 录(关键部分程序清单) 14 1 算法分析 1.1假设条件 有向图的强连通分量是有向图中的最大强连通子图。而对于一个有向图G,如果对于每一对的Vi和Vj∈V,Vi≠Vj,从Vi到Vj和Vj到Vi都存在路径,则称G是强连通图。 有向图强连通分量求解的设置分为存储、输入以及输出三大部分。 (1)算法的存储分为对有向图的顶点的存储,对有向图的弧的存储和对整个有向图的链式存储。 (2)输入分为三大部分:第一,输入有向图的顶点数以及弧条数(均为整数);第二,输入各个顶点的信息(均为字符型);第三,输入每一条弧的弧尾与弧头所对应的顶点信息,即对各顶点进行链式存储时的顶点信息,并以输出0 0 为结束标志。 (3)算法的输出为该有向图的所有强连通分量(以集合的形式表示)以及该有向图是否是强连通图。 1.2算法描述 该算法是为了实现输入一有向图到适当的存储结构中,判断该有向图是否强连通,若不是强连通图则求出该图的所有强连通分量并输出。 1.2.1 有向图的存储结构 对于输入的有向图,利用链式的存储结构进行存储即对有向图的顶点、弧以及有向图进行链式的存储。 有向图顶点的存储中包含邻接点域(adjvex)指示与顶点Vi邻接的点在图中的位置和链域(next)指示下一条弧的结点。有向图的弧的存储包含存储顶点Vi信息数据域(data)以及指向第一条依附该顶点的弧的指针(firstarc)指向链表中第一个结点。有向图的存储包含存储顶点的链表的最大长度,当前顶点数以及弧数。创建一个新的有向图就要输入图所包含的顶点数,弧条数,各顶点信息以及每条弧的弧尾和弧头所对应的顶点序号,并以输入0 0 为结束的标志。 1.2.2 深度优先遍历 假设初始状态为图中所有顶点都未被访问即flag[m]=0,则从图中的某个顶点出发,访问此顶点,对有向图的邻接表和逆邻接表进行深度优先遍历,并令flag[m]=1表示该结点已经被访问。当该结点未被访问时利用递归再对其进行访问,直到图中所有顶点都被访问到为止。 1.2.3 求解强连通分量 深度优先遍历是求解有向图的强连通分量的一个新的有效方法。 (1)对于以链式存储的有向图G,从某个顶点出发沿以该顶点为尾的弧进行深度优先搜索遍历,并按其所有邻接点的搜索都完成的顺序将顶点排列起来。 (2)再从最后完成搜索的顶点出发,沿着以该顶点为头的弧作逆向的深度优先遍历,若此次遍历不能访问到有向图中所有的顶点,则从余下的顶点中最后完成搜索的那个顶点出发,继续作逆向的深度优先遍历,依此类推,直至有向图中所有顶点都被访问到为止。 由此,每一次调用DFS作逆向深度优先遍历所访问到的顶点集便是有向图G中一个强连通分量的顶点集。 例如,图1.2.2所示的有向图,假设从顶点V1出发作深度优先搜索遍历,得到finished数组中的顶点号为(2,4,3,1);则再从顶点V1出发作逆向的深度优先搜索遍历,得到顶点集{V1,V3,V4}和{V2},这就是该有向图的两个强连通分量的顶点集。 2 系统设计 2.1设计说明 该算法设计共包含五大模块,即:有向图的主函数模块,链式存储模块,建立有向图的原图的邻接表和逆邻接表模块,深度优先遍历原图的邻接表模块,深度优先遍历原图的逆邻接表模块。主函数模块调用原图的邻接表和逆邻接表两个深度优先遍历的函数。函数模块关系如图2. 1.1所示: 2.2数据结构描述 该函数包含三个结构体,即存储弧、存储顶点和存储图的结构体。其结构体分别如下所示: 存储弧的结构体,其中包含两个变量adjvex和指针next, adjvex指示与顶点Vi邻接的点在图中的位置和next指示下一条弧的结点: typedef struct ArcNode{ int adjvex; struct ArcNode *next; }ArcNode; 存储顶点的结构体,其中包含两个变量data和指针firstarc,存储顶点Vi信息数据域(data)以及指向第一条依附该顶点的弧的指针(firs

文档评论(0)

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

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

1亿VIP精品文档

相关文档