文章目录

  • BFS DFS介绍
  • 实现思路
  • DFS BFS怎么应用
  • DFS BFS对比

又水了一篇博客呜呜,第一次尝试写DFS和BFS,做题也迷迷糊糊,看着大佬文章简单写了写总结,后续会补上DFS和BFS的题目。

BFS DFS介绍

DFS:深度优先搜索,又叫回溯算法。这个算法的核心就是不断的往更深的地方搜索,如果更深的地方搜索失败了,就返回来搜,是一个回溯的过程。
BFS:广度优先搜索,也是一种搜索算法,讲究搜索的广度,所以叫广度优先算法。这个算法的核心就是,先把周围的找完,再去找更深的地方。

这里区分下dfs和bfs,dfs就是一条路走到底,发现没路了,返回来,走另一条路,不撞南墙不回头。bfs就是每条路都走一点,这样一点点走总会走到想要的路。

实现思路

这两种算法都可以使用的递归的方式,其中dfs还可以用栈来实现,bfs还可以用队列实现。
DFS和BFS用递归实现的思路:
根据各自传参的优先级的顺序,不断的调用自身。
一般情况下,用递归实现BFS比较为难,所以常用队列实现。
DFS用栈实现的思路:
每遇到一个元素,就把这个元素的所有邻接元素入栈,当栈不为空的时候,不断的从栈顶拿出元素进行操作,直到栈为空。
BFS用队列实现的思路:
每遇到一个元素,就把这个元素的所有邻接元素放入队列,当队列不为空的时候,不断从队首拿出元素进行操作,直到队列为空。

DFS BFS怎么应用

BFS类似于水波纹的扩散,在求解一些最短路径,最优值问题的时候效率很高。
BFS为了遍历,需要保存所有的状态,对空间来说是一个巨大的消耗。(因为通常是无法递归实现的)
而DFS再解决回溯问题上优势很大,通过一个状态变量搜索所有,对空间是很大的节约。(但递归对我这样新手不是很友好ww)
所以一般情况DFS用递归写,BFS用队列写
那么如何使用DFS BFS解决问题呢?
凡是在一个二维矩阵中,找路径,找方法数,搜索东西,想都不要想,一般都可以用上。
去遍历图肯定是可以的。
看到有关找方法的问题,可以尝试使用。
凡是包含搜索思想的,都可以使用。

DFS BFS对比

DFS : 使用递归的方式对于恢复状态非常方便,因为大部分问题在回溯后都需要恢复相应的状态。但是对于递归理解不好的话,就感到很困难
BFS : 一般用队列,队列消耗空间很大,但使用非递归的方式,可能会更好理解,更直观。

DFS BFS简单理解相关推荐

  1. ROB 第一篇 DFS BFS (寻迹算法)

    ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...

  2. 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现

    简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...

  3. java bfs dfs_java优先搜索(DFS/BFS)实际应用

    深度优先搜索DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.广度优先搜索BFS是Breadth First Sear ...

  4. 【集训】DFS/BFS专训3

    DFS/BFS专训3 文章目录 DFS/BFS专训3 A. 生日蛋糕 B. 埃及分数 C. 最优贸易 D. 关系网络 E. 四色地图 F. 小猫爬山 G. 最大黑区域 H. 引水入城 I. 武士风度的 ...

  5. 数据结构——dfs/bfs

    文章目录 dfs/bfs 迷宫 OpenJ_Bailian - 2790 走迷宫 OpenJ_Bailian - 3752 迷宫问题 POJ - 3984 迷宫(一) 计蒜客 - T1595 迷宫(二 ...

  6. dfs bfs 完全没这概念啊 QAQ 咋这么抽象咩 快去找大佬学习哇哇哇~~

    序幕(1)来自学姐 "我自有傲骨,不念过往,不畏将来!"的理解 深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形: 1.把根节点压入栈中. 2.每次从栈中弹出 ...

  7. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  8. BFS简单搜索--POJ 2243

    这题就是简单的BFS搜索,刚刚转到C++,还有很多库函数不熟悉,理解到BFS是一种奇妙的迭代法,其用的主要是队列的性质. 1 /*BFS简单搜索*/ 2 #include<iostream> ...

  9. 洛谷 P1710 地铁涨价 (dfs+bfs)

    地铁涨价 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地铁连接两个不同的站. 地铁计 ...

最新文章

  1. 【C++】【五】循环链表
  2. SAP 没有QM02权限的情况下如何为一个质量通知单单据上传附件?
  3. gradlew 的https代理设定
  4. 巨杉数据库完成数千万美元C轮融资,嘉实投资领投
  5. 如何使用阿里云主机搭建lordofpomelo
  6. shell统计指定目录下所有文件类型及数量
  7. MongoDB学习笔记二—Shell操作
  8. arduino绘图_如何使用Arduino构建绘图仪
  9. java获取资源文件的各种方法
  10. python实现get请求 模块_python爬虫 基于requests模块发起ajax的get请求实现解析
  11. 艾伟:WM有约(一):你好,CF
  12. 创维酷开电视能换成android系统吗,创维酷开电视怎么系统升级【图文教程】
  13. Centos7 Kubernetes(K8s) k8s 开发 单服务器部署 rocketmq
  14. Atitit datatype 数据类型 目录 第一章 三大基本类型 数字 字符串 bool 1 第二章 基本类型vs引用类型 1 字符串类型 2 第三章 符合类型vs 简单类型 2 特殊类型
  15. 计算机房防凝露保温材料,机房保温的方案.docx
  16. html5小说阅读器源码,文本源码阅读器(NexusTextView)
  17. Resource Hacker软件更换应用图标
  18. 天邑ty1208z海思3798刷版本_[乐天固件]魔百和M301H-当贝版卡刷包-海思3798M
  19. 中国英语学习论坛(3)
  20. 使用IBM MQ远程连接时报错AMQ 4043解决思路

热门文章

  1. Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战
  2. C#将文件复制到另一个目录下
  3. django-生鲜商城项目笔记
  4. 计算机专业这么多课程怎么学
  5. 小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频
  6. 个人理解,关于python 的__init__.py 以及 __all__ 的用法
  7. html多媒体标签,元素的使用,标签大全
  8. 537-C++多态和抽象类
  9. Android Studio 快捷键完整版
  10. Android程序员:如何成为一个更好的Android开发者?经典好文