想到爆搜(这节不讲),大家未免会想到深搜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结束本次循环(结束的是第二层循环,理解别错)。
继续循环
作者就不给你们写代码了
上初中了太累了
本期就到这儿啦
4万+

被折叠的 条评论
为什么被折叠?



