DFS BFS简单理解
文章目录
- 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简单理解相关推荐
- ROB 第一篇 DFS BFS (寻迹算法)
ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...
- 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现
简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...
- java bfs dfs_java优先搜索(DFS/BFS)实际应用
深度优先搜索DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.广度优先搜索BFS是Breadth First Sear ...
- 【集训】DFS/BFS专训3
DFS/BFS专训3 文章目录 DFS/BFS专训3 A. 生日蛋糕 B. 埃及分数 C. 最优贸易 D. 关系网络 E. 四色地图 F. 小猫爬山 G. 最大黑区域 H. 引水入城 I. 武士风度的 ...
- 数据结构——dfs/bfs
文章目录 dfs/bfs 迷宫 OpenJ_Bailian - 2790 走迷宫 OpenJ_Bailian - 3752 迷宫问题 POJ - 3984 迷宫(一) 计蒜客 - T1595 迷宫(二 ...
- dfs bfs 完全没这概念啊 QAQ 咋这么抽象咩 快去找大佬学习哇哇哇~~
序幕(1)来自学姐 "我自有傲骨,不念过往,不畏将来!"的理解 深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形: 1.把根节点压入栈中. 2.每次从栈中弹出 ...
- 链式前向星模板 建图+dfs+bfs+dijkstra
边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...
- BFS简单搜索--POJ 2243
这题就是简单的BFS搜索,刚刚转到C++,还有很多库函数不熟悉,理解到BFS是一种奇妙的迭代法,其用的主要是队列的性质. 1 /*BFS简单搜索*/ 2 #include<iostream> ...
- 洛谷 P1710 地铁涨价 (dfs+bfs)
地铁涨价 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地铁连接两个不同的站. 地铁计 ...
最新文章
- 【C++】【五】循环链表
- SAP 没有QM02权限的情况下如何为一个质量通知单单据上传附件?
- gradlew 的https代理设定
- 巨杉数据库完成数千万美元C轮融资,嘉实投资领投
- 如何使用阿里云主机搭建lordofpomelo
- shell统计指定目录下所有文件类型及数量
- MongoDB学习笔记二—Shell操作
- arduino绘图_如何使用Arduino构建绘图仪
- java获取资源文件的各种方法
- python实现get请求 模块_python爬虫 基于requests模块发起ajax的get请求实现解析
- 艾伟:WM有约(一):你好,CF
- 创维酷开电视能换成android系统吗,创维酷开电视怎么系统升级【图文教程】
- Centos7 Kubernetes(K8s) k8s 开发 单服务器部署 rocketmq
- Atitit datatype 数据类型 目录 第一章 三大基本类型 数字 字符串 bool	1 第二章 基本类型vs引用类型	1 字符串类型	2 第三章 符合类型vs 简单类型	2 特殊类型
- 计算机房防凝露保温材料,机房保温的方案.docx
- html5小说阅读器源码,文本源码阅读器(NexusTextView)
- Resource Hacker软件更换应用图标
- 天邑ty1208z海思3798刷版本_[乐天固件]魔百和M301H-当贝版卡刷包-海思3798M
- 中国英语学习论坛(3)
- 使用IBM MQ远程连接时报错AMQ 4043解决思路
热门文章
- Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战
- C#将文件复制到另一个目录下
- django-生鲜商城项目笔记
- 计算机专业这么多课程怎么学
- 小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频
- 个人理解,关于python 的__init__.py 以及 __all__ 的用法
- html多媒体标签,元素的使用,标签大全
- 537-C++多态和抽象类
- Android Studio 快捷键完整版
- Android程序员:如何成为一个更好的Android开发者?经典好文