【BFS && DFS】模块小结

本文总结了BFS(宽度优先搜索)和DFS(深度优先搜索)的常见模板和应用注意事项。对于BFS,强调了队列的使用,边界判断的位置以及避免使用int型作为结果。DFS部分介绍了其回溯特性,通常不使用队列,而是配合栈或独立使用,且需要注意递归和下标的正确处理。

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

BFS 模板

(后面有单独的bfs小结)

写 一下做BFS 的思路。因为这题比较简单,代码量相对较少,也容易理解一些 更容易总结出模板

1、

先定义有关变量,一般是一个边界值、一个初始值、一个标记数组、加上一个 数组(一个变量) pair<>类型 (两个变量,如 x,y 坐标类型) 或 struct 定义一个新的类(三个以上变量)

2.

按照题意先建立主函数,如果是迷宫类问题,读入的可以直接用一层for循环加 %s 字符串,如果用两层for循环加 %c 字符的话要记得加getchar()

3.

最好bfs不要定义成int型,容易出现BUG(都是泪)。结果传递的时候注意 边界判断的 if 的位置,一般在while( q.size() )循环里 for()循环外。也不排除在for里面。

4.

到了最关键的bfs函数部分(……),bfs是宽度/广度搜索的简称,所以和dfs比起来,它有限搜索所有子节点,再搜索孙节点,以此类推。
在运用的时候一般是 队列/优先队列 + 一个模拟用的for + 一个判断用的judge(可以写在里面)来构成(如果用优先队列的话要记得重构)。

5.

运用时:先用for模拟所有的可能,然后判断是否加入队列,如果不符合,就自动进入下一个队列元素的循环(循环开始时该元素在队列中已经删除)。
否则的话就把该元素加入队列,并把计数数组vis加一。

6.

直到找到了ed(结束值)或者队列为空,循环结束。

DFS 模板

1.

dfs和bfs有通用的部分,然而一般用dfs的比较多,因为bfs容易溢出,至于时间复杂度两种都不是什么快捷的算法,代码量也比较大。dfs的中心思想是回溯。没有递归和回溯就没有dfs。

2.

和bfs类似,但是一般dfs不配合队列,一般独立使用或配合栈。因为dfs本身的回溯就有着强大的搜索功能,所以比较任性。

3.

一般根据题型,有的数不连续区域,有的求可行区域范围,还有数交叉范围的可落点(八皇后问题),以及一系列问题。大多情况需要回溯,少部分情况不需要(但是还是要递归)。

4.

千万注意下标,千万别越界。

5.

最后友情提醒,DFS有时候会有bug,最好规范书写,不然找错找到哭(都是泪……)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值