一丶深度优先(DFS)

深度优先顾名思义: 就是往深的地方优先查找或遍历。 如图二叉树,想遍历树中所有结点可以用中序遍历,前序或后序。如果某一结点还有子结点就会往深处就是往下一结点,一直遍历直到最后一个结点没有子结点时,然后退回上一级向另一个方向继续走。以前序遍历为例: 根-->左-->右  从D开始走,发现D左边还有B就继续走走到B(因为先判断作左边往左一直走下去,右边的E先不会走),到了B发现B左边有A还继续走到A,到A时发现A左没结点了再判断右边也没结点就是到头了,这时就得返回到上一级B然后向B右边的C走,以此类推一直下去就能遍历走完整棵二插树,这就是典型的深度优先应用场景。

二丶广度优先(BFS)

广度优先(又叫宽度优先)顾名思义:往广的地方优先查找或遍历。以上面树为例,从D开始走,发现D左边有B,如果是深度优先的话就不马上判断D的右边是否还有结点而是直接向深处就是向左直接走向B了,但是广度优先就不一样,广度优先会马上判断D是否还有其他结点比如D右边还有E,广度优先会走向B,然后E,之后以B像之前的D一样来判断怎么走,B完了又返回到E继续判断,以此类推。总之广度优先是按一层一层的来遍历: 第一层有D,第二层有B和E,第三层有A,C, G。遍历走完同一层的结点再走向下一层。

深度优先可以解决图这种数据结构的路径问题,如下图。

图中一个结点可能会被多个其他结点指向,如果求最短路径问题这时采用广度优先遍历可以很好解决这个难题。例如广州到深圳最短距离,采用广度优先广州分别走向佛山,珠海,镍庆,再依次从佛山...等地走向深圳把所有路线比较久可以计算出最短的广州到深圳距离。

算法:深度优先和广度优先(DFS,BFS)相关推荐

  1. 算法笔记 揭开广度优先遍历BFS的神秘面纱 HERODING的算法之路

    揭开广度优先遍历BFS的神秘面纱 前言 1. 审题 1.1 树的BFS 1.2 图的BFS 2. 解法 2.1 树的BFS 2.2 图的BFS 3. 总结 前言 最近到了面试的高峰时期,前段时间也刷了 ...

  2. 算法复习|广度优先搜索BFS

    广度优先搜索BFS 文章目录 广度优先搜索BFS HDU-1253 胜利大逃亡 HDU-1241 Oil Deposits 算法思想 从初始状态S开始,利用一定的规则,生成所有下一层的状态,依次入队 ...

  3. 搜素算法(基础)--DFS/BFS算法(JAVA)

    DFS.BFS的定义及C语言算法实现请参照 连通图遍历策略之深度优先搜索(C语言) 连通图遍历策略之广度优先搜索(C语言) 为了便于理解这里的数据是一个无向图,要求输出遍历顺序 下面只给出用例和算法, ...

  4. LeetCode算法题13:DFS/BFS - 单词搜索

    文章目录 单词搜索 DFS : 小小的优化 总结 单词搜索 题目链接:https://leetcode-cn.com/problems/word-search/ 题目描述: 给定一个 m x n 二维 ...

  5. java数据结构和算法——图的广度优先(BFS)遍历

    目录 一.图的遍历介绍 二.图的广度优先搜索(Broad First Search) 三.图的广度优先遍历算法步骤 四.图的广度优先遍历示例需求 五.图的广度优先遍历代码示例 一.图的遍历介绍 所谓图 ...

  6. 算法题目——省份数量(dfs,bfs)

    题目链接:leetcode.547省份数量 dfs: 深度优先遍历:递归 思路:读入数据完成后 重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数 1.对所有省份循环一次,如果该省份未 ...

  7. 数据结构与算法--图的广度优先搜索 (BFS)

    广度优先搜索即是 一种"地毯式"层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索. BFS解决的最短路径问题. 采用BFS进行遍历的话,需要依赖队列,先进先 ...

  8. [AcWing算法刷题]之DFS+BFS迷宫模板(简单)

    题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围​ 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...

  9. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

最新文章

  1. Linux 内核代码行数达到 2700 万行量级
  2. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...
  3. Python+selenium 自动化-chrome驱动的下载安装
  4. BZOJ 1821: [JSOI2010]Group 部落划分 Group【MST】
  5. pycharm 运行.py文件如何像控制台那样传参?
  6. Magicodes.IE之快速导出Excel
  7. Function Query(树状数组)
  8. python保存所有变量值_如何在当前python会话中保存所有变量?
  9. [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]
  10. java对外sdk提供接口_Android SDK封装,对外提供接口
  11. 打破双亲委派么,怎么打破_打破它。 然后告诉我们您是如何打破它的。
  12. 自动轨迹绘制的python代码_python 自动轨迹绘制的实例代码
  13. linux下文件合并、分割、去重
  14. 你还认为中国没有桌面虚拟化核心技术?
  15. 想安装一套监控,流程是什么?费用多少?
  16. 继续来研究JScript解析引擎的GC问题
  17. Java后端实现视频分段渐进式播放
  18. 2-13 monthCalendar日历控件
  19. 程序员老了之后练太极最合适了
  20. c语言帮助记忆单词的小程序,帮助记忆单词的书课堂活动微信小程序软件_速记背单词...

热门文章

  1. 利用ZXing生成和读取二维码
  2. SppNet详述 附代码
  3. python zip函数的运用
  4. 锌离子掺杂介孔二氧化钛空心微球/银离子/阴离子/阳离子/锆离子修饰二氧化硅微球制备与性能
  5. Matlab中的fread函数
  6. 谷歌和苹果是“两种不同的政府”
  7. 0.树莓派3上安装配置Archlinux
  8. 词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍
  9. SNS营销——网商成功之道
  10. # SpringBoot 整合 Activiti 工作流框架