算法:深度优先和广度优先(DFS,BFS)
一丶深度优先(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)相关推荐
- 算法笔记 揭开广度优先遍历BFS的神秘面纱 HERODING的算法之路
揭开广度优先遍历BFS的神秘面纱 前言 1. 审题 1.1 树的BFS 1.2 图的BFS 2. 解法 2.1 树的BFS 2.2 图的BFS 3. 总结 前言 最近到了面试的高峰时期,前段时间也刷了 ...
- 算法复习|广度优先搜索BFS
广度优先搜索BFS 文章目录 广度优先搜索BFS HDU-1253 胜利大逃亡 HDU-1241 Oil Deposits 算法思想 从初始状态S开始,利用一定的规则,生成所有下一层的状态,依次入队 ...
- 搜素算法(基础)--DFS/BFS算法(JAVA)
DFS.BFS的定义及C语言算法实现请参照 连通图遍历策略之深度优先搜索(C语言) 连通图遍历策略之广度优先搜索(C语言) 为了便于理解这里的数据是一个无向图,要求输出遍历顺序 下面只给出用例和算法, ...
- LeetCode算法题13:DFS/BFS - 单词搜索
文章目录 单词搜索 DFS : 小小的优化 总结 单词搜索 题目链接:https://leetcode-cn.com/problems/word-search/ 题目描述: 给定一个 m x n 二维 ...
- java数据结构和算法——图的广度优先(BFS)遍历
目录 一.图的遍历介绍 二.图的广度优先搜索(Broad First Search) 三.图的广度优先遍历算法步骤 四.图的广度优先遍历示例需求 五.图的广度优先遍历代码示例 一.图的遍历介绍 所谓图 ...
- 算法题目——省份数量(dfs,bfs)
题目链接:leetcode.547省份数量 dfs: 深度优先遍历:递归 思路:读入数据完成后 重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数 1.对所有省份循环一次,如果该省份未 ...
- 数据结构与算法--图的广度优先搜索 (BFS)
广度优先搜索即是 一种"地毯式"层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索. BFS解决的最短路径问题. 采用BFS进行遍历的话,需要依赖队列,先进先 ...
- [AcWing算法刷题]之DFS+BFS迷宫模板(简单)
题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...
- Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)
对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...
最新文章
- Linux 内核代码行数达到 2700 万行量级
- cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...
- Python+selenium 自动化-chrome驱动的下载安装
- BZOJ 1821: [JSOI2010]Group 部落划分 Group【MST】
- pycharm 运行.py文件如何像控制台那样传参?
- Magicodes.IE之快速导出Excel
- Function Query(树状数组)
- python保存所有变量值_如何在当前python会话中保存所有变量?
- [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]
- java对外sdk提供接口_Android SDK封装,对外提供接口
- 打破双亲委派么,怎么打破_打破它。 然后告诉我们您是如何打破它的。
- 自动轨迹绘制的python代码_python 自动轨迹绘制的实例代码
- linux下文件合并、分割、去重
- 你还认为中国没有桌面虚拟化核心技术?
- 想安装一套监控,流程是什么?费用多少?
- 继续来研究JScript解析引擎的GC问题
- Java后端实现视频分段渐进式播放
- 2-13 monthCalendar日历控件
- 程序员老了之后练太极最合适了
- c语言帮助记忆单词的小程序,帮助记忆单词的书课堂活动微信小程序软件_速记背单词...