美文网首页
搜索问题:广度优先搜索(BFS)、深度优先搜索(DFS)

搜索问题:广度优先搜索(BFS)、深度优先搜索(DFS)

作者: Gaoyt__ | 来源:发表于2019-07-14 18:50 被阅读0次

广度优先搜索(BFS)

广度优先搜索一层一层地进行遍历,每层遍历都以上一层遍历的结果作为起点,遍历一个距离能访问到的所有节点。需要注意的是,遍历过的节点不能再次被遍历。

第一层:
0 -> {6,2,1,5}

第二层:
6 -> {4}
2 -> {}
1 -> {}
5 -> {3}

第三层:
4 -> {}
3 -> {}

每一层遍历的节点都与根节点距离相同。设 di 表示第 i 个节点与根节点的距离,推导出一个结论:对于先遍历的节点 i 与后遍历的节点 j,有 di <= dj。利用这个结论,可以求解最短路径等 最优解 问题:第一次遍历到目的节点,其所经过的路径为最短路径。应该注意的是,使用 BFS 只能求解无权图的最短路径,无权图是指从一个节点到另一个节点的代价都记为 1。

在程序实现 BFS 时需要考虑以下问题:
队列:用来存储每一轮遍历得到的节点;
标记:对于遍历过的节点,应该将它标记,防止重复遍历。

深度优先搜索(DFS)

广度优先搜索一层一层遍历,每一层得到的所有新节点,要用队列存储起来以备下一层遍历的时候再遍历。

而深度优先搜索在得到一个新节点时立即对新节点进行遍历:从节点 0 出发开始遍历,得到到新节点 6 时,立马对新节点 6 进行遍历,得到新节点 4;如此反复以这种方式遍历新节点,直到没有新节点了,此时返回。返回到根节点 0 的情况是,继续对根节点 0 进行遍历,得到新节点 2,然后继续以上步骤。

从一个节点出发,使用 DFS 对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,DFS 常用来求解这种 可达性 问题。

在程序实现 DFS 时需要考虑以下问题:
:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈。
标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。

回溯(BackTracking)

回溯属于DFS
· 普通DFS主要用在可达性问题,这种问题只需要执行到特点的位置然后返回即可;
· 而Backtracking主要用于求解排列组合问题,例如有{'a', 'b', 'c'}三个字符,求解所有由这三个字符排列得到的字符串,这种问题在执行到特定的位置返回之后还会继续执行求解过程。

因为Backtracking不是立即返回,而要继续求解,因此在程序实现时,需要注意对元素的标记问题:
· 在访问一个新元素进入新的递归调用时,需要将新元素标记为已经访问,这样才能在继续递归调用时不用重复访问该元素;
· 但是在递归返回时,需要将元素标记为未访问,因为只需要保证在一个递归链中不同时访问一个元素,但可以访问已经访问过的但不在当前递归链中的元素。

相关文章

  • BFS和DFS

    BFS:广度优先搜索 DFS:深度优先搜索 树的遍历 BFS:A B C D E F G H I DFS: A ...

  • DFS与BFS LeetCode 刷题小结(一)

    本节我们将汇总一些 LeetCode bfs与dfs相关的题。 关于深度优先搜索(DFS)和广度优先搜索(BFS)...

  • 普通搜索之DFS

    深度优先搜索(DFS)和广度优先搜索(BFS)是搜索问题中比较常见的方法。此篇介绍DFS算法思想。现有n个点,m条...

  • ❤算法解析---图的广度优先搜索(BFS)和深度优先搜索(DFS

    图的广度优先搜索(BFS)和深度优先搜索(DFS)算法解析 https://blog.csdn.net/weixi...

  • 图的相关算法

    深度优先搜索非递归形式 DFS 深度优先搜索非递归形式 广度优先搜索 BFS 判断无向图是否是树 判断有向图中两...

  • 图的深度优先遍历和广度优先遍历

    图的遍历主要有深度优先搜索 DFS(depth-first search) 和广度优先搜索BFS( breadth...

  • DFS(栈)&BFS(队列)

    前言 对树(tree)或者图(graph)而言,深度优先搜索(DFS) 和广度优先搜索(BFS)都是用于遍历或者搜...

  • 刷题7 剑指 Offer — DFS

    树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);常见的 DFS : 先序遍历、中序遍历、...

  • BFS

    [TOC] BFS 和 DFS BFS广度有限搜索和DFS深度优先搜索算法是特别常用的两种算法 DFS 算法就是回...

  • 算法

    算法应用BFS广度优先搜索DFS深度优先搜索回溯法(DFS+剪枝)部分和问题分治法快速排序、归并排序动态规划背包问...

网友评论

      本文标题:搜索问题:广度优先搜索(BFS)、深度优先搜索(DFS)

      本文链接:https://www.haomeiwen.com/subject/dndikctx.html