【bfs基础】①
bfs,即广度优先搜索,主要通过队列(queue)进行操作。
稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下:

在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 (该点未被访问过且合法)
{
将该点加入队列末尾;
}
}
}
队列为空,广搜结束;
}
例题:单向公路
例题:密码锁
今天就讲到这里,后续会持续更新。
【bfs基础】①的更多相关文章
- ZOJ - 3890 Wumpus(BFS基础题)
Wumpus Time Limit: 2 Seconds Memory Limit: 65536 KB One day Leon finds a very classic game call ...
- PTA 2-1 列出连通集【DFS+BFS基础】
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输入格式: 输入第1 ...
- Clone Graph leetcode java(DFS and BFS 基础)
题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...
- POJ 2251 三维BFS(基础题)
Dungeon Master Description You are trapped in a 3D dungeon and need to find the quickest way out! Th ...
- poj 3278 catch that cow BFS(基础水)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 61826 Accepted: 19329 ...
- 【万能的DFS和BFS基础框架】-多刷题才是硬道理!
- 算法与数据结构基础 - 广度优先搜索(BFS)
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...
- 2020牛客寒假算法基础集训营5 G.街机争霸 (bfs)
https://ac.nowcoder.com/acm/problem/201961 预处理出僵尸走的路径,僵尸走的周期长度应该为2k-2,在普通的bfs基础上加上一维表示时间,从当前位置x,y和和时 ...
- poj 2046 Gap(bfs+hash)
Description Let's play a card game called Gap. You have cards labeled with two-digit numbers. The fi ...
随机推荐
- 元素命名空间中的“MvcBuildViews”无效
原文:元素命名空间中的"MvcBuildViews"无效 症状描述: VS2010打开项目时提示:"元素 命名空间"http://schemas.microso ...
- iOS学习总结之ARC和非ARC的单例模式实现
iOS单例模式的实现 首先我们要明白下面三个问题: 什么是单例模式 单例模式的优点 如何实现单例模式 1.什么是单例模式 单例模式(Singleton):单例模式确保对于一个给定的类只有一个实例存在, ...
- 微信小程序把玩(十四)button组件
原文:微信小程序把玩(十四)button组件 button按钮用的算是最普遍的组件之一. 主要属性: wxml <!--按钮默认样式,点击事件--> <button type=&qu ...
- C#调用Microsoft.DirectX.DirectSound.dll时出错
1.修改工程的编译选项.我的开发运行环境是Windows 10 x64系统.需要修改一下工程的编译选项,把AnyCPU改成x86的. 未能加载文件或程序集“Microsoft.DirectX.Dire ...
- 使用Visual Studio开发Python
Python优秀的集成开发环境有PyCharm,Visual Studio Code等,当然你仍然可以使用Visual Studio进行开发.如果你熟悉Visual Studio,使用Visual S ...
- QT4与QT3的不同
1)QT4中提供了大量新控件,虽然它也保持了旧的控件,并命名为Qt3XXX,但是这样的控件没准在今后的哪个QT版本中就不被支持了,所以还是换吧,控件替换的工作是巨大的,这些新的控件使用了新的方法.属性 ...
- qt源码的submodules要怎么使用
请问我下载了submodules里面的源代码,怎么使用?http://download.qt.io/official_releases/qt/5.7/5.7.1/submodules/如下载了qweb ...
- web开发常用正则表达式
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$".只能输入n位的数字:"^\d{n}$".只能输入至少n位的数 ...
- MySQL批量更新一个字段的值为随机数
$arr = []; $str = ''; for ($i=0; $i < 2660; ++$i) { $str .= " WHEN ".$i." THEN &qu ...
- Spring注解?啥玩意?
目录 基础概念:@Bean 和 @Configuration 使用AnnotationConfigApplicationContext 实例化Spring容器 简单的构造 使用register注册IO ...