- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第16讲图的遍历与最小生成树
第16讲 图的遍历与 最小生成树 主讲人:陈红丽 图的遍历 从图的某个顶点出发,访问图中的所有顶点,且使每个顶点仅被访问一次,这一过程叫做图的遍历。 图的遍历操作是求解图的连通性问题、拓扑排序等问题的基础。 遍历方法:深度优先遍历和广度优先遍历 图中任意两个顶点之间都可能存在一条弧或边,也可能存在某个顶点和其它顶点之间都不存在弧或边。图的遍历除了要确定一条搜索路径之外,还要解决两个问题: (1)如何确保每个顶点都被访问到 深度优先搜索 广度优先搜索 (2)如何确保每个顶点只被访问一次 为每个顶点建立一个“访问标志 visited[i]”,在遍历开始之前,将它们设为 “FALSE”,一旦第i个顶点被访问,则令 visited[i] 为 “TRUE”。 从顶点v1出发进行深度优先遍历 深度优先搜索DFS 基本思想: 从图中某顶点v出发: 1)访问顶点 v,并将其访问标记置为访问过,即 visited[v] = 1; ;2)依次从 v 的未被访问的邻接点出发,继续对图进行深度优先遍历,直到和v有路径相通的顶点都被访问过; 3)如果图中还有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问过为止。 深度优先搜索DFS 算法: ①设置一个标记数组,设所有顶点都未曾被访问; ②从起点v出发,访问此顶点,同时设置访问标记; ③依次从v的未被访问过的邻接点出发进行DFS,直到和v有路径相通的顶点都被访问过; ④若所有顶点都已访问,则完成;否则,另择起点v,转至②。 深度优先遍历过程是递归的,在遍历过程中,若某个顶点的所有邻接顶点均被访问过,则需要回溯。 根据图G的邻接矩阵,从顶点V1出发,写出深度优先遍历序列。 已知某图G的邻接表如下所示,分别写出从顶点0和顶点3出发的DFS序列。 广度优先搜索BFS 从顶点v1出发进行BFS遍历 广度优先搜索 基本思想: 从图中某个顶点vi出发: 1)访问顶点vi,并将其访问标志置为已被访问,即visited[vi]=1; 2)访问vi的所有未被访问的邻接点w1,w2,…,wk; 3)依次从这些邻接点(在步骤2)中访问的顶点)出发,访问它们的所有未被访问的邻接点; 依此类推,直到图中所有访问过的顶点的邻接点都被访问. 为实现3),需要 保存在步骤2)中访问的顶点,而且访问这些顶点的邻接点的顺序为:先保存的顶点,其邻接点先被访问。 广度优先搜索 算法: ①设所有顶点都未曾被访问; ②从起点出发,将起点编号加入队列; ③取队首元素,设为v,访问结点v,同时设置访问标记; ④依次将v的各个未被访问过的顶点加入队列 ⑤若队列不空,则循环执行③④,否则⑥; ⑥若所有顶点都已访问,则完成;否则,另择起点V,转至②。 已知邻接表,求以顶点0和顶点3为起点的广度遍历序列。 遍历的应用 利用图的遍历运算求解图的连通性问题 无向图是否连通、有几个连通分量,求解无向图的所有连通分量 深度优先生成树、生成森林 广度优先生成树、生成森林 有向图是否是强连通、求解其强连通分量 求无向网的最小代价生成树 回顾:无向图及其生成树 最小生成树 概念 各边权值之和最小的生成树。 假设要在 n 个城市间建立通信联络网,则连通 n个城市只需n-1 条线路。如何在最节省经费的前提下建立这个通讯网? 用带权的图(连通网)来表示 n 个城市及其之间的通信线路: 顶点——表示城市 边——两城市之间的通信线路 权——城市间建立通信线路的代价 在e条带权的边中选取n-1条(不构成回路),使“权值之和”为最小,即:构造网的一棵最小代价生成树。 求最小生成树的两个算法: 普里姆算法:从1个起点0条边出发,不断扩充顶点,直到包括所有顶点为止,适用于求边稠密的网的最小生成树。 克鲁斯卡尔算法:从n个顶点0条边出发,不断扩充边,直到包括n-1条边为止,适用于求边稀疏的网的最小生成树。 普里姆(Prim)算法 设N=(V,E)是连通网,从起点v0出发,构造最小生成树T=(VT, ET)。VT是N上最小生成树中顶点的集合,ET是N上最小生成树中边的集合。 ①初始化VT={v0},ET={ }; ②找权值最小的(Vp,Vq), Vp∈VT, Vq∈V-VT; ③将(Vp,Vq)并入ET,同时Vq并入VT; ④重复②③步骤n-1次。 最小代价生成树 普里姆算法构造最小生成树的过程是从一个顶点VT={v0}作初态,不断寻找与VT中顶点相邻且代价最小的边的另一个顶点,扩充VT集合直至VT=V为止。 最小代价生成树 普里姆算法求最小生成树 最小代价生成树 普里姆算法求最小生成树 最小代价生成树 普里姆
文档评论(0)