广(宽)度优先搜索

2021/12/25 23:10:23

本文主要是介绍广(宽)度优先搜索,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

广(宽)度优先搜索

相关知识:队列

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.www.zyiz.net/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结束
}


这篇关于广(宽)度优先搜索的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程