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解决倒水问题

    。。。。。。

  • 相关阅读:
    BZOJ1588_营业额统计_KEY
    关于欧几里得算法的认识
    javacv实战篇
    图像处理里面的的尺度什么?
    改成 否“依然报LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”问题的解决
    javacv
    以前写过的一些oracle语句
    warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    在vs环境中跑动sift特征提取(原理部分)
    《sift算法详解》阅读笔记
  • 原文地址:https://www.cnblogs.com/WHLdbk/p/6604197.html
Copyright © 2011-2022 走看看