广度优先搜索:
可确保找到最优解,但是因扩展出来的节点较多,且多数节点都需要保存,因此需要的存储空间较大。用队列保存节点。
算法:
- 把初始节点放入队列中;
- 如果队列为空,则问题无解,失败退出;
- 把队列的第一节点取出,并记该节点为n;
- 考察节点n是否为目标节点。若是,则得到问题的解,成功退出;
- 若节点不可扩展,则转第2步;
- 扩展节点n,将其不没有入队(没有标记)的子节点(弹出队列的节点是已标记的)放入队列中(这一步需要判重),并为每一个子节点设置指向父节点的指针(或记录节点的层次),然后转第2步。
广度优先搜索的代码框架:
BFS()
{
初始化队列
while(队列不为空且未找到目标节点)
{
取队首节点扩展,并将扩展出的非重复节点放入队尾;
必要时要记住每个节点的父节点(求最短路径);
}
}