- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 图 主讲:戚玉涛 第七章 图 7.1 图的定义与基本术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图的应用 7.6 最短路径 图的遍历 从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。 如果给定图是连通的无向图或者是强连通的有向图,则遍历过程一次就能完成,并可按访问的先后顺序得到由该图所有顶点组成的一个序列。 根据搜索方法的不同,图的遍历方法有两种: 深度优先搜索法 DFS (Depth-First Search) 广度优先搜索法 BFS (Breadth-First Search) 深度优先搜索遍历 Depth First Search 类似于树的先根遍历 优先向纵深访问 深度优先搜索遍历 从图G中选某个顶点V作为出发点; 访问V; 依次从V的未被访问的邻接点出发,深度优先搜索遍历图G, 直至与V相通的顶点都被访问完; 如果此时图G中还有顶点未曾被访问,则从这些未被访问的顶点中再选一个顶点V,转2,继续遍历;否则遍历结束。 显然,这个遍历过程是个递归过程。 深度优先搜索遍历 由于图中可能存在回路,所以在沿着某搜索路径遍历时可能会遇到已经被访问过的顶点。 为了避免顶点被多次访问,需要专门设置一个数组int visited[n],来标记已经访问过的顶 visited数组的下标与顶点数组平行: 广度优先搜索遍历 Breadth First Search 类似于树的按层次遍历 相对于出发点由近及远地访问 广度优先搜索遍历 从图G的某个顶点v出发,访问v; 依次访问V的未被访问的邻接点; 再按照“先被访问顶点的邻接点先访问”的次序,依次访问这些邻接点的邻接点,直至图中所有已被访问的顶点的邻接点都被访问到; 若此时图中还有顶点未曾被访问,则另选一个未被访问的顶点v作为出发点,重复上述过程,直至图中所有的顶点都被访问完。 广度优先搜索 第七章 图 7.1 图的定义与基本术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图的应用 7.6 最短路径 图的连通性问题 无向图的连通分量 生成树和生成森林 连通网的最小代价生成树:最小生成树 图的连通性问题 对于连通图,无论是广度优先搜索还是深度优先搜索,仅需调用一次搜索过程,即从任一个顶点出发,便可以遍历图中的各个顶点。 对于非连通图,则需要多次调用搜索过程,而每次调用得到的顶点访问序列恰为各连通分量中的顶点集。 因此,对DFS(BFS)算法稍做修改就可解决求无向图连通分量的问题。 无向图的生成树 无向图的生成树:一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但只有构成一棵树的(n-1)条边。 en-1 → 非连通图 en-1 → 有回路 e=n-1 → 不一定都是图的生成树 无向图的生成树 设G=(V,E)为连通图,则从图中任一顶点出发遍历图时,必定将E(G)分成两个集合T和B。其中T是遍历图过程中走过的边的集合,B是剩余的边的集合: T∩B=Φ and T∪B=E(G) 显然,G‘=(V,T)是G的极小连通子图。即G’是G的一棵生成树。 生成树和生成森林 由深度优先遍历得到的生成树称为深度优先生成树;由广度优先遍历得到的生成树称为广度优先生成树。这样的生成树是由遍历时访问过的n个顶点和遍历时经历的n-1条边组成。 对于非连通图,每个连通分量中的顶点集和遍历时走过的边一起构成一棵生成树,各个连通分量的生成树组成非连通图的生成森林。 连通图的DFS生成树: 在对图做DFS遍历时,从一个已访问的顶点出发,到达一个未被访问的顶点所经历的边集及所有顶点构成的生成树。 最小生成树 一个无向图可以对应多个生成树。 一个带权无向图(无向网)同样可以对应多个生成树。 最小生成树 生成树的代价:一棵生成树的代价定义为树上各边的权之总和。 最小生成树:在一个连通网的所有生成树中, 各边的代价之和最小的那棵生成树称为该连通网的最小代价生成树(Minimum Cost Spanning Tree),简称为最小生成树(MST)。 。 构造最小生成树的算法: Prim算法 Kruskal算法 最小生成树的性质(MST性质): 设 N=(V, E) 是一连通网,U 是顶点集V的一个非空子集。 若(u , v)是一条具有最小权值的边, 其中u∈U, v∈V-U, 则存在一棵包含边(u , v)的最小生成树。 MST性质的证明(反证法): 设G的任何一棵最小生成树上都不包含这
文档评论(0)