数据结构2_第8章1.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构2_第8章1

一、图的基本概念 图定义 图是由顶点集合(vertex)及顶点间的关系 集合组成的一种数据结构: G=( V, E ) 其中 V = { x | x ? 某个数据对象} 是顶点的有穷 非空集合; E = {(x, y) | x, y ? V } 是顶点之间关系的有穷集合,也叫做边(edge)集 合。 图的抽象数据类型 数据集合: 操作集合: 在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。 设图 G= (V, E)是一个有 n 个顶点的图,则图的邻接矩阵是一个二维数组 A .Edge[n][n],定义: 无向图的邻接矩阵是对称的,有向图的邻接矩阵可能是不对称的。 网络的邻接矩阵 特点: 无向图的邻接矩阵对称,可压缩存储;有n个顶点的无向图需存储空间为n(n+1)/2 有向图邻接矩阵不一定对称;有n个顶点的有向图需存储空间为n2 无向图中顶点Vi的度TD(Vi)是邻接矩阵A中第i行元素之和 有向图中, 顶点Vi的出度是A中第i行元素之和 顶点Vi的入度是A中第i列元素之和 邻接表 (Adjacency List) 无向图的邻接表 把同一个顶点发出的边链接在同一个边链表中,链表的每一个结点代表一条边,叫做边结点,结点中保存有与该边相关联的另一顶点的顶点下标 dest 和指向同一链表中下一个边结点的指针 link。 有向图的邻接表和逆邻接表 在有向图的邻接表中,第 i 个边链表链接的边都是顶点 i 发出的边。也叫做出边表。 在有向图的逆邻接表中,第 i 个边链表链接的边都是进入顶点 i 的边。也叫做入边表。 带权图的边结点中保存该边上的权值 cost。 顶点 i 的边链表的表头指针 adj 在顶点表的下标为 i 的顶点记录中,该记录还保存了该顶点的其它信息。 在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。 设图中有 n 个顶点,e 条边,则用邻接表表示无向图时,需要 n 个顶点结点,2e 个边结点;用邻接表表示有向图时,若不考虑逆邻接表,只需 n 个顶点结点,e 个边结点。 网络 (带权图) 的邻接表 三、图的遍历性 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历 ( Graph Traversal )。 图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。 为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组 visited [ ],它的初始状态为 0,在图的遍历过程中,一旦某一个顶点 i 被访问,就立即让 visited [i] 为 1,防止它被多次访问。 深度优先搜索DFS ( Depth First Search ) 深度优先搜索的示例 DFS 算法: 1.访问结点v,并标记结点v为已访问 2.查找结点v的第一个邻接结点w 3.若结点v的邻接点w存在,则继续执行,否则算法结束; 4.若结点w尚未被访问,则递归访问结点; 5.查找结点v的w邻接结点的下一个邻接结点w,转到步骤3. 例子 广度优先搜索BFS ( Breadth First Search ) 广度优先搜索的示例 使用广度优先搜索在访问了起始顶点 v 之后,由 v 出发,依次访问 v 的各个未曾被访问过的邻接顶点 w1, w2, …, wt,然后再顺序访问 w1, w2, …, wt 的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,… 如此做下去,直到图中所有顶点都被访问到为止。 广度优先搜索是一种分层的搜索过程,每向前走一步可能访问一批顶点,不像深度优先搜索那样有往回退的情况。因此,广度优先搜索不是一个递归的过程,其算法也不是递归的。 为了实现逐层访问,算法中使用了一个队列,以记忆正在访问的这一层和上一层的顶点,以便于向下一层访问。 与深度优先搜索过程一样,为避免重复访问,需要一个辅助数组 visited [ ],给被访问过的顶点加标记。 例子 四、最小生成树 ( minimum cost spanning tree ) 克鲁斯卡尔 (Kruskal) 算法 克鲁斯卡尔算法的基本思想: 设有一个有 n 个顶点的连通网络 N = { V, E }, 最初先构造一个只有 n 个顶点,没有边的非连通 图 T = { V, ? }, 图中每个顶点自成一个连通分量。 当在 E 中选到一条具有最小权值的边时,若该边的 两个顶点落在不同的连通分量上,则

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档