博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bfs基础】①
阅读量:5069 次
发布时间:2019-06-12

本文共 900 字,大约阅读时间需要 3 分钟。

 

bfs,即广度优先搜索,主要通过进行操作。

稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下:
在这里插入图片描述
在C++中,队列的头文件定义为:#include<queue>
队列的声明:queue<T1> q;
这样就定义了一个数据类型为"T1"的队列q。
成员函数及作用集合:

q.empty() 判断队列q是否为空,当队列q空时,返回true;否则为false(值为0(false)/1(true))。
q.size() 访问队列q中的元素个数。不可写成sizeof(q)或size(q)
q.push() 会将一个元素a置入队列q中
q.front() 返回队列q内的第一个元素(也就是第一个被置入的元素)。(不可写成front(q))
q.pop() 会从队列q中移除第一个元素。(不可写成pop(q))

队列是一种非常常见的数据结构,最常用于bfs(广度优先搜索)。

广度优先搜索可以将其想象成水滴落入水面溅起了的一圈一圈的涟漪,是由一个起始点开始一圈一圈进行扩散搜索的。(请一定要自行想象这个过程,非常重要!)

就比如这样一个丑陋的 图:
在这里插入图片描述
从顶点1开始搜索,广搜过程依次为:1-2-3-4-5-6-7-8.
从顶点1开始搜索,深搜过程依次为:1-2-3-5-7-8-4-6.
很明显,广搜是一次性把与当前顶点有连通关系的点全部搜索完了,才搜索更下一层
这样就可以很清楚的有深搜的思路并用代码实现了:

伪代码:

void bfs(起始点){	将起始点放入队列中;	标记起点访问;	while (如果队列不为空)	{		访问队列中队首元素x;		删除队首元素;        		for (x 所有相邻点)		{		            if (该点未被访问过且合法) 		            {		            	将该点加入队列末尾;		             }       		 } 	}	队列为空,广搜结束;}

今天就讲到这里,后续会持续更新。

 

转载于:https://www.cnblogs.com/moyujiang/p/11167778.html

你可能感兴趣的文章
EOS生产区块:解析插件producer_plugin
查看>>
数据库框架的log4j日志配置
查看>>
lintcode-easy-Remove Element
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
switchcase的用法
查看>>
React.js 小书 Lesson15 - 实战分析:评论功能(二)
查看>>
Java基础03 构造器与方法重载
查看>>
kafka的使用
查看>>
Linux0.11内核--加载可执行二进制文件之1.copy_strings
查看>>
编写Nginx启停服务脚本
查看>>
这些老外的开源技术养活了很多国产软件
查看>>
看图软件推荐
查看>>
【IdentityServer4文档】- 欢迎来到 IdentityServer4
查看>>
安全测试的一些漏洞和测试方法
查看>>
spring框架学习笔记(八)
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>