- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.6.1 图的基本概念 3.6.2 图的存储 3.6.3 图的遍历 3.6.4 图的应用 图的存储 邻接矩阵 3.6.2 图的存储 1. 邻接矩阵法 (1)给顶点编号 (2)建立邻接(关系)矩阵 图的存储 邻接矩阵 邻接矩阵的优点: 增减边的操作简单 邻接矩阵的缺点: 增减顶点的操作需要搬移大量的元素, 浪费存储空间 图的存储 邻接矩阵的实现 图的邻接矩阵实现 图的存储 邻接表 2. 邻接表法 一个邻接表由两种结构组成 存放各顶点元素的数组,头结点 各顶点各自的邻接链表,邻接结点 图的存储(课堂练习) 请写出下面这副图的邻接表 1)给顶点编号 2)建立顶点数组 3)建立各顶点的邻接链表 注意,此图为有向图 图的存储 邻接表的实现 邻接表的定义 头结点的定义 邻接结点的定义 图的存储 邻接表 图邻接表的定义 图的存储 邻接表 图的存储 图的邻接表存储法的特点 优点 节省存储空间 边的插入和删除操作比较简便 缺点 结构复杂 具有两种不同的基本组成单元 图的存储 3. 边带权值的图的存储 1)在邻接矩阵中的实现 图的存储 3. 边带权值的图的存储 2)在邻接表中的实现 在邻接结点结构中增加一个权值域 图的遍历 3.6.3 图的遍历 问题: 1)对于连通图,从一个顶点出发沿着所有可能的路径,是否可以将所有的顶点遍历到。 2)图中有回路,遍历算法可能产生死循环。 有重复的路径称为回路 图的遍历 深优 1. 深度优先遍历 (1)从一个未访问过的顶点开始,访问它的一个未访问过的相邻顶点。 (2)如果顶点的所有相邻顶点都是已访问过的,则需要回溯到之前的一个顶点,选取它的另一个未被访问的相邻顶点。 (3)对于前两个步骤是递归的 图的遍历 深优 1. 深度优先遍历 (1)从一个未访问过的顶点开始,访问它的一个未访问过的相邻顶点。 (2)如果顶点的所有相邻顶点都是已访问过的,则需要回溯到之前的一个顶点,选取它的另一个未被访问的相邻顶点。 (3)对于前两个步骤是递归的 图的遍历 深优 深度优先遍历的特点 “深度”:总是访问顶点的一个相邻顶点,好像是沿着图中的一条路径走到“底”,然后后退一点,再选一条路。如此“进进退退”,直到所有顶点都被访问 对于连通图,如果第一个被访问的顶点的所有相邻顶点都被访问了,意味着图中所有顶点都被访问了。 即栈空时 图的遍历 深优 用递归调用实现深度优先遍历算法 图的遍历 广优 2. 广度优先遍历 访问顶点v后,接着依次访问v的所有邻接顶点,再依次访问这些邻接顶点的邻接顶点。直到所有的顶点都被访问过。 图的遍历 广优 广度优先遍历的特点 “广度”:总是在访问了一个顶点后,依次访问它的所有相邻顶点。然后再从它的第一个相邻顶点开始,访问其所有的相邻顶点。如此逐个顶点地逐步扩散,直到所有的顶点都被访问。 广度优先遍历操作具有队列操作的特点,当从队列中取出最后一个顶点,发现该顶点的所有相邻顶点都被访问过时,意味着图中所有的顶点都已被访问过 生成树与图 3.6.4 图的应用 1. 生成树定义 假设存在这样一颗树: 树结点的集合与图的顶点集合相等 树的分支全部由图的边组成。 称这颗树是这幅图的生成树 生成树是图的: 子集/子图 是一个不包含回路的子图 图的生成树是 生成树与图 生成树与图 2. 最小费用生成树(通信网络、交通网络) 在图所有生成树中,边的权值总和最小的生成树 生成树与图 算法分析 关键技术: 为什么在(1,4)边选中后不能选(3,6)边 在选择(3,6)边和(2,3)边时有什么不同,怎样设置条件以区别? 当时3和6位于同一图中,2、5和3位于不同的图中 生成树与图 图的最短路径 3 .最短路径 图中两个顶点之间有 条路径 最短路径: 是路径中边(弧)的权值总和最小的路径 计算机网络中常使用最短路径算法计算最佳路径 交通网络中使用最短路径算法计算最短旅途 Dijkstra Algorithm 拓 扑 排 序 关 键 路 径 作业 A1 A2 A4 A3 A5 2 6 5 1 2 1 5 1)初始化时,设A1到其它不直连顶点距离为∞ 寻找A1到所有节点的最短路径 A2 A3 A4 A5 顶点 距离 路径 2)选择距离最短的路径 3)观察通过新选择的路径是否能更短地到达其它顶点 4)选择出的最短路径将不参加下一轮比较 5)反复2 - 4步,直到不剩有顶点 2 6 5 ∞ A2 A3 A4 A1 A2 A3--3 更新 A1 A2 A3 3 A1 A2 A4-- ∞ A1 A2 A5-- 4 A1 A2 A3 A4--4 更新 A1 A2 A3 A4 4 A1 A2 A3 A5--8 A1 A2 A5 4 A1 A2 A3 A4 A5--∞ 更新 按一
文档评论(0)