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