网站大量收购独家精品文档,联系QQ:2885784924

数据结构:第六章 图.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1 图的基本概念 图是一种复杂的非线性结构。图中结点之间的关系是任意的,即任意两个结点之间都可能有关系(“多对多”关系)。 一、图定义 图G是由两个集合V,E组成,记作:G=( V, E ) ,  其中:V = { x | x ? 某个数据对象} ,是顶点的非空有限集合;E = {(x, y) | x, y ? V } ,是顶点之间关系的有限集合,也叫做边(edge)集合。 分为:有向图与无向图 若图G中的每条边都是有方向的,则称G为有向图。有向边也称为弧,是顶点的有序对,记:v,w v,w∈V,表示:v→w.称v为始点,w为终点。 若图G中的每条边都是没有方向的,则称G为无向图。边是顶点的无序对。记(v,w) v,w∈V,表示v-w. 二、术语 邻接顶点 若(u,v)是一条无向边,则称顶点u和v互为邻接点,或称u和v相邻接。对于有向边u,v,称顶点u邻接到顶点v,顶点v邻接自顶点u。 6.2 图的存储结构 用两个数组存储,一个记录各个顶点信息的顶点表,还有一个表示各个顶点之间相邻关系的二维数组,称邻接矩阵。 设图 A = (V, E)是一个有 n 个顶点的图,则图的邻接矩阵是一个二维数组A .Edge[n][n],定义: 在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度,统计第 j 列 1 的个数可得顶点 j 的入度。 在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。 网络的邻接矩阵 邻接矩阵表示法中图的描述 二、邻接表 (Adjacency List) 类似于树的孩子链表示法。 方法:把同一个顶点发出的边链接在同一个边链表中,链表的每一个结点代表一条边,叫做边结点,结点中保存有与该边相关联的另一顶点的顶点下标 dest 和指向同一链表中下一个边结点的指针 link。另外,每个链表设一表头结点:存放顶点的值和指向第一个结点的指针。并将所有表头结点存放在数组中。 1、无向图的邻接表 2、有向图的邻接表和逆邻接表 在有向图的邻接表中,第 i 个边链表链接的边都是顶点 i 发出的边。也叫做出边表。 在有向图的逆邻接表中,第 i 个边链表链接的边都是进入顶点 i 的边。也叫做入边表。 在邻接表中求顶点vi的出度:第i个链表中结点个数; 入度:扫描邻接表,邻接点域值为i的结点个数。 带权图的边结点中保存该边上的权值 cost。 在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。 设图中有 n 个顶点,e 条边,则用邻接表表示无向图时,需要 n 个顶点结点,2e 个边结点;用邻接表表示有向图时,若不考虑逆邻接表,只需 n 个顶点结点,e 个边结点。 网络 (带权图) 的邻接表 6.3 图的遍历 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历 ( Graph Traversal )。 图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。 为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组 visited [ ],它的初始状态为 0,在图的遍历过程中,一旦某一个顶点 i 被访问,就立即让 visited [i] 为 1,防止它被多次访问。 遍历方法:深度优先遍历、广度优先遍历 一、深度优先搜索DFS ( Depth First Search ) 深度优先搜索的示例 DFS 方法:在访问图中某一起始顶点 v 后,由 v 出发,访问它的任一邻接顶点 w1;再从 w1 出发,访问与 w1邻接但还没有访问过的顶点 w2;然后再从 w2 出发,进行类似的访问,… 如此进行下去,直至到达所有的邻接顶点都被访问过的顶点 u 为止。接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点(设置访问标志数组visit[i])。如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问(递归过程);如果没有,就再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止。 例子 二、广度优先搜索BFS ( Breadth First Search ) 广度优先搜索的示例 使用广度优先搜索在访问了起始顶点 v 之后,由 v 出发,依次访问 v 的各个未曾被访问过的邻接顶点 w1, w2, …, wt,然后再顺序访问 w1, w2, …, wt 的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,… 如此做下去,直到图中所有顶点都被访问到为止。 广度优先搜索是一种分层的搜索过程,每向前走一步可能访问一批顶点,不像

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档