- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.3 图的存储结构 6.3.1 邻接矩阵 (1)图的邻接矩阵表示 用数组记录各个顶点信息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。 (2)邻接矩阵 设图 A = (V, E)是一个有 n 个顶点的图, 图的邻接矩阵是一个二维数组 , 定义: 邻接矩阵举例,如图7.10、7.11 1 2 0 3 0 1 2 7.10 无向图及其邻接矩阵 7.11 有向图及其邻接矩阵 注: 无向图的邻接矩阵是对称的;有向图的邻接矩阵可能是不对称。 在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度;在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度,统计第 j 行 1 的个数可得顶点 j 的入度。 网络的邻接矩阵 2 3 0 1 8 6 3 1 2 9 5 4 ? 邻接矩阵G[N][N]——N个顶点从0到N-1编号 G[i][j] = 1 0 若vi,vj是G中的边 否则 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v0 0 1 0 1 0 0 0 0 0 0 3 0 1 5 2 4 v1 v2 v3 v4 1 0 1 0 0 1 1 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 7 6 8 9 v5 v6 v7 v8 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 1 0 0 1 v9 0 0 0 0 1 1 0 0 1 0 ? 邻接矩阵 问题:对于无向图的存储,怎样可以省一半空间? v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 用一个长度为N(N+1)/2的1维数组A存储 v0 v1 v2 v3 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 则Gij在A中对应的下标是: v4 v5 v6 v7 v8 v9 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1 1 0 0 1 0 ( i×(i+1)/2 + j ) 对于网络,只要把G[i][j]的值定义为边 vi,vj的权重即可。 问题:vi和vj之间若没有边该怎么表示? 邻接矩阵 —— 有什么好处? ? 直观、简单、好理解 ? 方便检查任意一对顶点间是否存在边 ? 方便找任一顶点的所有“邻接点”(有边直接相连的顶点) ? 方便计算任一顶点的“度”(从该点发出的边数为“出 度”,指向该点的边数为“入度”) ? 无向图:对应行(或列)非0元素的个数 ? 有向图:对应行非0元素的个数是“出度”;对应列非0元素的 个数是“入度” 邻接矩阵 —— 有什么不好? ? 浪费空间 —— 存稀疏图(点很多而边很少)有大量无效元素 ? 对稠密图(特别是完全图)还是很合算的 ? 浪费时间 —— 统计稀疏图中一共有多少条边 6.3.2 邻接表 (1)无向图的邻接表 同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一 条边(边结点), 结点中有另一顶点的下标 dest 和指针next。 B C A D data adj A B C D 0 1 2 3 dest next dest next ? ? ? ? 1 3 0 2 1 0 (2)有向图的邻接表和逆邻接表 邻接表 (出边表) A B C data adj A B C 0 1 2 dest next dest next ? 1 0 2 ? ? 逆邻接表 (入边表) data adj A B C 0 1 2 dest next ? ? ? 0 1 1 (3)网络 (带权图) 的邻接表 data adj A B C D 0 1 2 3 dest cost next ? ? ? ? 1 5 3 6 2 8 3 2 1 9 (出边表) (顶点表) 9 5 2 8 B A C D 6
文档评论(0)