BFS
简介
我们回顾一下之前的搜索树。
我们发现,我们需要一个按照层为关键字遍历这个搜索树的算法。
考虑这种遍历的形式:
得到一个状态之后,我们用它拓展出所有状态,然后将它丢弃。
每次选择当前未被丢弃的最早的一个状态进行拓展,这样我们就能保证优先的性质。
这像什么数据结构呢?
我们发现这个的特点是:先进先出
这就很像队列。
具体的写法:
首先建立一个队列,将初始状态放入队列。
然后每次选择队头,拓展,把新状态计入队列。
优点缺点
优点
优先性,dfs无法解决优先性质的问题
缺点
较难统计具体方案
BFS 模板
front <-1; rear <-1;
初始状态入列;
while (front<=rear) //当队列不为空
{
取队首元素进行扩展;
for (对所有可能的扩展状态)
{
if (新状态合法)
入队;
if (当前状态是目标状态)
处理(输出解或者比较解的优劣);
}
队首节点扩展完毕,出队;
}