广(宽)度优先搜索
相关知识:队列
主要操作:
1.入队(push)
2.出队(pop)
3.判断队列是否为空(empty)
4.统计队列元素个数(size)
5.访问队首元素(front)
#include<queue> //queue头文件
queue<T> q; //构建一个T类型的队列
q.push(XX); //入队
q.pop(); //出队
q.front() //获得队首元素
q.empty(); //判断队列是否为空,在pop之前需要检查一下
基本思路:
不同于深搜的一搜到底,广搜更倾向于一层一层搜。
深搜:A-B-E-F-C-D-G
广搜:A-B-C-D-E-F-G
代码框架:
void BFS()
{
初始化,添加开始节点(例如1)
while (队列不为空)
{
获取队首元素,将vis设置为1 //保险
for (遍历该元素所有邻居)
{
if(该邻居进过队)
{
入队,将vis设置为1 //保险
}
}
弹出队首元素
}
}
————————————————————————————————————————————————
void BFS(起始点)
{
将起始点放入队列中;
标记起始点访问;
while (如果队列不为空)
{
访问队列首元素;
删除队列首元素;
for (x 所有相邻的点)
{
if (该点未访问且合法)
{
将该点加入队列末尾
}
}
}
队列为空,BFS结束
}