DFS与BFS的算法模板

本文介绍了DFS和BFS两种搜索算法。DFS利用栈按照深度优先顺序访问节点,适合解决连通性问题,但可能面临爆栈风险;BFS则使用队列按宽度优先顺序访问,常用于最短路径问题,内存需求通常大于DFS。理解这两种算法的数据结构和应用场景对于解决计算机科学中的问题至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DFS 算法

思想:向深处搜索,直到找到解或者走不下去
这里写图片描述

BFS算法

这里写图片描述

数据结构

DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。

BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进出队列。

用途

DFS多用于连通性问题因为其运行思想与人脑的思维很相似,故解决连通性问题更自然。
BFS多用于解决最短路问题,其运行过程中需要储存每一层的信息,所以其运行时需要储存的信息量较大,如果人脑也可储存大量信息的话,理论上人脑也可运行BFS。

多数情况运行BFS所需的内存会大于DFS需要的内存(DFS一次访问一条路,BFS一次访问多条路)。

风险

DFS容易爆栈(栈不易”控制”),BFS通过控制队列可以很好解决”爆队列”风险。

框架:

BFS:

#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值