广搜要用到队列的概念,直接使用STL的queue
模板:
q.push(x);//将初始状态放入队列
while (!q.empty())
{
state u=q.front();//取出队首
q.pop();//出队
for(..)//对当前队首u拓展所有可能状态也就是下一层的v
if(..)
/*如果拓展的下一状态的可能符合题目要求就更新答案,否则如果不符合或超出范围那么继续拓展下一种可能*/
q.push(v)//将这一状态重新排入队伍的队尾
}
广搜和深搜的区别就在于广搜着重的是其广度,模板中for循环了u可能达到的所有状态vi(i=1,2,...n)同时将符合要求的状态vi(i=1,2....n)放入队尾,所有可能检查完放入后,while循环继续执行的是队伍的第二个也就是v1,再次检查v1的所有可能然后列举出符合的所有状态wi(i=1,2....n)放入队尾,以此类推。因此广搜的特点是所有搜索的状态是保持在同一层上
而深搜是着重深度,是就某一可能深度检查直到找到一个答案