广搜BFS的基本理论和实践技巧

想到爆搜(这节不讲),大家未免会想到深搜dfs和广搜bfs。

由于博主深搜掌握还没太深,所以给大家先介绍BFS。

BFS目录页:

①BFS能解决什么问题?

②BFS怎么解决这种问题?(理论上)

①BFS能解决什么问题?

BFS(Breadth First Search),名字叫做广度优先搜索,我们一般叫他广搜。

BFS和DFS解决的问题类型相同,一般来说,BFS解决最多的问题是像让一个人从(X,Y)到(X1,Y1)需要走的步数或者其它,具体看题目复杂程度。

BFS的中心思想就是枚举。

他会将那个人可以走的所有合法路径全部扔到一个队列里,队列会存储这些信息,当找到某条路径是第一次合法(到达终点)时,BFS保证了他一定是最优路径。

那么他究竟如何解决呢?

②BFS怎么解决这种问题?(理论上)

一般来说傲,BFS中的核心队列是要用结构体定义的。

结构体定义方式我再讲一遍:

(typedef) struct 自定义类型名称

{

        变量1

        变量2

        ……

        变量N
}(自定义类型名称,*P+自定义类型名称);

注意末尾的分号~!

BFS有以下几个步骤:

1.将起点条件扔进队列。

2.使用q.empty()函数判断队列是否为空。队列为空则不进入循环,反之亦然。(!q.empty())

循环内:

(1)用自定义类型变量取队头(tmp=q.front();)

(2)弹出队头(q.pop();)

(3)队头变量满足最终条件?是:扔出答案,结束循环(使用break);否:继续循环

(4)队头变量是否不合法?(例如走到了不能走的地方)是:结束本次循环(使用continue) 否:继续循环

(5)将队头变量可到达的所有位置进行循环

(6)这个位置是否合法(这个很难,要考虑全面!)?是:扔进队列 否:continue结束本次循环(结束的是第二层循环,理解别错)。

继续循环

作者就不给你们写代码了

上初中了太累了

本期就到这儿啦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值