您现在的位置是:首页 >

图深度遍历 图 - 图的遍历 - 深度优先遍历(一)

火烧 2022-03-28 15:14:13 1060
图 - 图的遍历 - 深度优先遍历(一)   图的遍历概念   图的遍历  和树的遍历类似 图的遍历也是从某个顶点出发 沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问 它是许多图的算  法的基础

图 - 图的遍历 - 深度优先遍历(一)  

  图的遍历概念

   图的遍历

  和树的遍历类似 图的遍历也是从某个顶点出发 沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问 它是许多图的算

  法的基础

  深度优先遍历和广度优先遍历是最为重要的两种遍历图的方法 它们对无向图和有向图均适用

  注意

  以下假定遍历过程中访问顶点的操作是简单地输出顶点

   布尔向量visited[ n ]的设置

图深度遍历 图 - 图的遍历 - 深度优先遍历(一)

  图中任一顶点都可能和其它顶点相邻接 在访问了某顶点之后 又可能顺着某条回路又回到了该顶点 为了避免重复访问同一个

  顶点 必须记住每个已访问的顶点 为此 可设一布尔向量visited[ n ] 其初值为假 一旦访问了顶点V i 之后 便将

  visited[i]置为真

  深度优先遍历(Depth First Traversal)

   图的深度优先遍历的递归定义

  假设给定图G的初态是所有顶点均未曾访问过 在G中任选一顶点v为初始出发点(源点) 则深度优先遍历可定义如下 首先访问出

  发点v 并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w 若w未曾访问过 则以w为新的出发点继续进行深度优先遍历

   直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止 若此时图中仍有未访问的顶点 则另选一个

  尚未访问的顶点作为新的源点重复上述过程 直至图中所有顶点均已被访问为止

  图的深度优先遍历类似于树的前序遍历 采用的搜索方法的特点是尽可能先对纵深方向进行搜索 这种搜索方法称为深度优先搜

  索(Depth First Search) 相应地 用此方法遍历图就很自然地称之为图的深度优先遍历

   深度优先搜索的过程

  设x是当前被访问顶点 在对x做过访问标记后 选择一条从x出发的未检测过的边(x y) 若发现顶点y已访问过 则重新选择另

  一条从x出发的未检测过的边 否则沿边(x y)到达未曾访问过的y 对y访问并将其标记为已访问过;然后从y开始搜索 直到搜索

  完从y出发的所有路径 即访问完所有从y出发可达的顶点之后 才回溯到顶点x 并且再选择一条从x出发的未检测过的边 上述过程

  直至从x出发的所有边都已检测过为止 此时 若x不是源点 则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的

  顶点(即从源点可达的所有顶点)都已被访问过 若图G是连通图 则遍历过程结束 否则继续选择一个尚未被访问的顶点作为新源点

lishixinzhi/Article/program/sjjg/201311/23840  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码