- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机理论与算法分析5深度优先搜索DFS
深度优先搜索 DFS 图的基本概念 图分为有向图和无向图。无向图是一个用边连接在一起的节点(顶点)的集合。有向图可以说规定了方向的边和所连接顶点的集合 顶点不重复的闭迹称为圈。没有圈的图称为森林。 如果存在一条以u为起点、v为终点的途径,则说顶点u可达顶点v。 如果图G中任何两个顶点之间都是可达的,则说图G是连通。 如果图G不是连通的,则其必能分成几个连通分支。 不含圈的连通图称为树,森林的连通分支是树。森林即是不含圈的图。 图的遍历 和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问。它是许多图的算法的基础。 深度优先遍历和广度优先遍历是最为重要的两种遍历图的方法。它们对无向图和有向图均适用。 搜索策略 深度优先搜索所遵循的搜索策略是尽可能“深”地搜索图。 1)对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续探寻下去。 2)当结点v的所有边都己被探寻过,搜索将回溯到发现结点v有那条边的始结点。 3)这一过程一直进行到已发现从源结点可达的所有结点为止。 4)如果还存在未被发现的结点,则选择其中一个作为源结点并重复以上过程,整个进程反复进行直到所有结点都被发现为止。 作为起点。 边(1,2)还未检测。 以 为起点。 边(2,3)还未检测。以 为起点。 边(3,4)还未检测。以 为起点。 只有边(4,1)还未检测,但 已经被搜索过。退回到 没有未检测的边,退回到 从 出发的边有(2,4) ,但 已被搜索过。退回到 边(1,3)还未检测。但 已被搜索过。 在搜索过程中为结点着色以表示结点的状态 1)初始状态——每个顶点均为白色 2)搜索中被发现的顶点——置为灰色 3)结束时(即当其邻接表被完全检索之后)又被置成黑色。 这一技巧可以保证每一顶点搜索结束时只存在于一棵深度优先树上,因此这些树都是分离的。 procedure DFS(G) 1 for each vertex u∈V do 2 color[u]←white 3 for vertex each u∈V do 3-1 if color[u]=white then DFS_visit(G,u) repeat end 依据深度优先搜索可以获得有关图的结构的大量信息 深度优先树的结构准确反映了DFS_visit中递归调用的结构 深度优先搜索的最基本的特征是它的先辈子图G,形成一个由树组成的森林 1、判断G是否存在一个环 3、判断G的连通性 找连通分量。深度优先树划分了无向图的连通分支。 找强连通分支。 同一强连通分支内的所有顶点均在同一深度优先树中。 将深度优先树中所有能够到达根节点的顶点找出来,这些顶点和根节点同一强连通分支。 DFS搜索形成r棵搜索树 用一个数组st保存搜索顺序 左边的树没有到右边树的边,强连通分支只会在同一棵树中。 深度优先搜索的另一重要特性是发现和完成时间具有括号结构,如果我们把发现顶点u用左括号“(u”表示,完成用右括号“u)”表示,那么发现与完成的记载在括号被正确套用的前提下就是一个完善的表达式。 括号定理 在对有向图或无向图G=(V,E)的任何深度优先搜索中,对于图中任意两结点u和v,下述三个条件中有且仅有一条成立: 区间[d[u],f[u]]和区间[d[v],f[v]]是完全分离的; 区间[d[u],f[u]]完全包含于区间[d[v],f[v]]中且在深度优先树中u是v的后裔; 区间[d[v],f[v]]完全包含于区间[d[u],f[u]]中且在深度优先树中v是u的后裔。 白色路径定理证明: 设v是u的后裔,w是深度优先树中u和v之间的通路上的任意结点,则w必然是u的后裔,可知d[u]d[w],因此在时刻d[u],w应为白色。 * 1 2 3 1 2 3 1 2 4 3 1 2 4 3 1 2 4 3 1 2 4 1 2 3 4 1 2 3 4 1 3 1 3 2 2 4 1 3 2 4 1 3 5 1 2 3 4 5 6 7 8 5 9 10 9 10 以顶点1为起点的深度优先搜索树。 6 以顶点5为起点的深度优先搜索树。 11 8 7 11 以顶点7为起点的深度优先搜索树。 procedure DFS_visit(G,u) 1 color[u]←Gray //白色结点u已被发现 2 for each edge(u,v) do //探寻边(u,v) 2-1 if color[v]=White then DFS_v
文档评论(0)