zoukankan      html  css  js  c++  java
  • DFS&BFS

    1.深度优先遍历
    基本思想:
    从图中某顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点
    出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到;
    若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点

    重复上述过程,直至图中所有顶点都被访问到为止。
    分析:

    在遍历图时,对图中每个顶点至多调用一次DFS函数,因为一旦某个顶点被
    标志成已被访问,就不再从它出发进行搜索。
    因此,遍历图的过程实质上是对每个顶点查找其邻接点的过程。其耗费的时
    间则取决于所采用的存储结构。 当使用二维数组表示邻接矩阵作图的存储结构
    时,查找每个顶点的邻接点所需时间为O(n^2),其中n为顶点数。而当以邻接表
    作图的存储结构时,找邻接点所需时间为O(e),其中e为无向图中边的数目或有
    向图中弧的数目。由此,当以邻接表作存储结构时,深度优先搜遍遍历图的时间
    复杂度为O(n+e)。

     1:DFS解决带权最短路径问题

    2:DFS解决分块问题

    3:DFS解决路径条数问题

    4:棋盘问题、N皇后问题

    。。。。。。

    2.广度优先遍历
    基本思想:
    从图中某个顶点V0出发,并在访问此顶点后依次访问V0的所有未被访问过的
    邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所
    有和V0有路径相通的顶点都被访问到;
    若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点

    重复上述过程,直至图中所有顶点都被访问到为止。
    分析:
    每个顶点至多进一次队列。遍历图的过程实质上是通过边或弧找邻接点的过
    程,因此广度优先搜索遍历图的时间复杂度和深度优先搜索遍历相同,两者不同
    之处仅仅在于对顶点访问的顺序不同。

    1:BFS解决无权最短路径问题(带权不好回溯)

    每个节点的状态相对于自己都是唯一的,而回溯的前提是不同路径到一个节点,该节点的状态可能存在变化

    2:BFS解决分块问题

    3:BFS解决倒水问题

    。。。。。。

  • 相关阅读:
    POJ 2342 树形DP入门题
    《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova
    GDI+ 填充背景时,非常多时候不起作用,GDI、GDI+配合运用
    Jave中System.getProperty()获取的值
    NYOJ128 前缀式计算(栈的运用)
    Web安全測试二步走
    一个SQL update语句
    C#时间格式之GMT时间的格式
    粘包的处理
    socket对于大数据的发送和接收
  • 原文地址:https://www.cnblogs.com/WHLdbk/p/6604197.html
Copyright © 2011-2022 走看看