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

    。。。。。。

  • 相关阅读:
    Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料第6章
    安装Vault Professional Server的一些问题
    Autodesk Infrastructure Map Server(AIMS)/MapGuide API 培训材料第2章
    C++的构造函数和析构函数
    一些常用的字符串hash函数
    类的operator new与operator delete的重载
    计算字符串的相似度(编辑距离)
    C++的重载(overload)与重写(override)
    穷举法解24点游戏
    C语言字符串库函数的实现
  • 原文地址:https://www.cnblogs.com/WHLdbk/p/6604197.html
Copyright © 2011-2022 走看看