和递归不同,宽搜使用队列而非递归遍历元素。
就搜索树来说,深搜适合度数小,深度大的树。宽搜适合度数大,深度小的树。
对于类似棋盘搜索的情况宽搜更为适合。
其伪代码模板如下:
void BFS(origin: 源点){
var q: 队列, inq: 集合,保存入过队的点;
q.push(origin);
inq.insert(origin);
while(q 不为空){
var front= q.front(); q.pop();
visit(front); // 处理节点
for(var i= front 的后继节点){
if(i 不在 inq 中){
q.push(i);
inq.insert(i);
}
}
}