BFS:Breadth First Search
搜索算法的一种。从初始结点开始,应用算符生成第一层结点,检查目标结点是否在这些后继结点中,若没有,再用产生式规则将所有第一层的结点逐一扩展,得到第二层结点,并逐一检查第二层结点中是否包含目标结点。若没有,再用算符逐一扩展第二层所有结点……,如此依次扩展,直到发现目标结点为止 。
总结:
1.先搜索距离初始状态近的状态;
2.复杂度为O(状态数×转移方式)
3.广搜运用了队列,搜索的时候首先将初始状态加入队列里,此后从队列的最前端取出状态,把从该状态可以转移到的且尚未访问过的部分加入队列,如此往复,直至队列被取空或找到了问题的解;
4.适用于找最短路径,最少操作数。
队列编程模板:
BFS()
{
Queue<> q;
q.push(i);// 起始点
while(!q.empty())
{
j=q.front();q.pop();
visit(j);
foreach(j子节点k)
{ q.push(k);}
}
}
Q:
迷宫最短路径
给定一个大小为N*M的迷宫,已知迷宫由通道’.’和墙壁’#’组成,S表示主角位置