数据结构与算法(C语言篇)第五章 图.pptVIP

数据结构与算法(C语言篇)第五章 图.ppt

  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文档。上传文档
查看更多
4.子图 如果存在两个图 G=(V,E)和 G=(V,E),并且满足 V?V 和 E?E,则称 G为 G 的子图。图 5.8(b)、 图 5.8(c)、图 5.8(d)都是图 5.8(a)的子图。 5.顶点的度 对于无向图来说,某一个顶点的度是与该顶点相关联的边的数量。如图 5.9 所示,顶点 A 的度为 3,表示为 D(A)=3;顶点 B 的度为 2,表示为 D(B)=2。 对于有向图来说,以顶点 Vi 为弧头的弧的数量称为 Vi 的入度,以顶点 Vi 为弧尾的弧的数量称为 Vi 的出度,Vi 的度为入度与出度的和。如图 5.10 所示,顶点 C 的入度为 2,出度为 2,度为 4;顶点 F 的入度为 1,度为 1。 6.路径 从顶点 Vi 到顶点 Vj 经过的顶点与弧称为 Vi 与 Vj 之间的路径。对于有向图来说,其路径也是有向 的。路径上弧的数量称为路径的长度。例如,图 5.10 中的顶点 E 到顶点 F 的路径长度为 3 或 4。 如果路径中的顶点不重复出现,则称该路径为简单路径。第一个顶点与最后一个顶点相同的路 径称为回路或环。除了第一个顶点与最后一个顶点之外,其他顶点不重复出现的回路称为简单回路 或简单环。 图 5.10 中,B?C?A、E?B?C?F 都是简单路径,B?C?A?B 为简单回路。 7.连通性 如果顶点 Vi 与顶点 Vj 之间存在路径,则称 Vi 与 Vj 是连通的。若图中任意两顶点都连通,则称该 图为连通图。在有向图中,任意一对顶点 Vi 与 Vj,从 Vi 到 Vj 和从 Vj 到 Vi 都存在路径,则称该有向 图为强连通图。 邻接矩阵使用两个数组(一个一维数组与一个二维数组)来表示图形结构,一维数组用来存储 图中顶点的信息,二维数组用来存储图中弧的信息。 假设图 G 有 n 个顶点,则需要创建一个可以存储 n 个数据元素的一维数组 V[n],并且创建一个 可以存储 n×n 个数据元素的二维数组 arc[n][n],也可以将二维数组理解为一个 n×n 的矩阵,其定义 如下。 上述公式中,1 表示顶点 Vi 与顶点 Vj 之间存在弧,0 表示不存在弧。 如图 5.11 所示,创建一个无向图,并使用一维数组存储顶点信息,使用二维数组(矩阵)表示 顶点之间的关系。 图 5.11 中,存放图顶点数据的数组为 V[4]={A,B,C,D},二维数组 arc[4][4]对应图中的矩 阵,由此可知,arc[2][0]=1 表示的是顶点 A 与顶 点 C 之间存在弧,arc[3][2]=1 表示的是顶点 C 与 顶点 D 之间存在弧。 如果图为有向图,则表示方法与无向图类似, 如图 5.12 所示,同样使用一维数组存储图中顶点 的信息,使用二维数组存储顶点之间的关系。 图 5.12 中,arc[3][0]=1 表示从顶点 D 到顶点 A 具有弧,而 arc[0][3]=0 表示从顶点 A 到顶点 D 不具有弧。矩阵最后一行与最后一列表示顶点 D 的出度与入度,可知顶点 D 的度为 3。 虽然邻接矩阵可以解决图形结构的逻辑存储问题,但是当图中的弧明显少于顶点时,采用这种 存储方式会浪费大量的存储空间。 如图 5.13 所示,无向图中的大部分顶点之间不存 在连接关系,而二维数组本身占用的存储空间不会随着 记录信息的减少而减少。因此,使用二维数组记录顶点 关系,可能会造成大量存储资源浪费。 使用邻接表表示无向图,如图 5.14 所示。 图 5.14 中,一维数组中的每一个数据元素由 data 和 ver 组成。data 中存储的是顶点的数据,ver 中存储的是指针,该指针指向一个链表,链表中的结点存储的是当前顶点的邻接点的下标。其中, adj 表示邻接点在一维数组中的下标,next 用来指向下一个邻接点。 图 5.14 中无向图的顶点 B,与其邻接的是顶点 A 与顶点 C,而顶点 A 与顶点 C 在一维数组中的 下标分别为 0、2,因此顶点 B 对应的 ver 指向的链表中有两个结点,分别存储的值为 0、2。 如果图是有向图,其邻接表的结构也是类似的。由于有向图的弧是有方向的,因此既需要记录 以顶点为弧头的弧,也需要记录以顶点为弧尾的弧。使用邻接表的方式表示有向图,如图 5.15 所示。 如果图中顶点之间的关系具有权值,则需要在邻接表中添加一个记录权值的数据域,如图 5.16 所示。 图 5.16 中,顶点 C 为弧尾时,其邻接点为顶点 A 与顶点 D,对应的权值为 15 与 13。 对于有向图而言,邻接表具有一定的缺陷。如图 5.15 所示,邻接表只能解决顶点出度的问题, 而逆邻接表只能解决顶点入度的问题。因此,可以考虑将邻接表与逆邻接表结合到一起,这种存储

文档评论(0)

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

本文库主要涉及建筑、教育等资料,有问题可以联系解决哦

版权声明书
用户编号:5213302032000001

1亿VIP精品文档

相关文档