其他分享
首页 > 其他分享> > 广(宽)度优先搜索

广(宽)度优先搜索

作者:互联网

广(宽)度优先搜索

相关知识:队列

asd

主要操作

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之前需要检查一下

基本思路

不同于深搜的一搜到底,广搜更倾向于一层一层搜。
https://www.icode9.com/i/ll/?i=20200315201426396.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTk2MDg5MA==,size_16,color_FFFFFF,t_70
深搜: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结束
}

标签:优先,队列,队首,元素,pop,BFS,入队,搜索
来源: https://www.cnblogs.com/GalaxyOier/p/15731808.html