【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 ...
随机推荐
- 浅谈.NET(C#)与Windows用户账户信息的获取
原文:浅谈.NET(C#)与Windows用户账户信息的获取 目录 1. 用户账户名称 - 使用Environment类 2. 用户账户信息 - 使用WindowsIdentity和IdentityR ...
- 中国2017 Google 开发者大会第二天简单回顾
昨天早晨发布了第一天的开发者大会回顾文章后,就匆匆忙忙赶去会场继续享受高科技的盛宴,接下来简单回顾一下第二天的大会参与情况. 昨天早晨下着小雨,并带着微风,在外面还是挺冷的,这里不得不给工作人员点个赞 ...
- 開發PlainTasks與JSON的插件
PlainTasks 是款很有名的任務管理插件,具體的介紹在這裡. 我最近的工作作務,是開發一款插件,能實現 JSON 文件到 todo 類文件的轉換. JSON 的格式是這樣的 1: { 2: &q ...
- Awesome Go (http://awesome-go.com/)
A curated list of awesome Go frameworks, libraries and software. Inspired by awesome-python. Contrib ...
- leetcode解答索引一期工程:1 - 40题
更多内容敬请期待.解法是否最优不能保证,但OJ肯定是能过的. 1: Two Sum 2: Median of Two Sorted Arrays 3: Longest Substring Withou ...
- Oracle PL/SQL编程
一.PL/SQL简介 1.概念:PL/SQL是Oracle在标准SQL语言上的过程性扩展. 2.优点和特性 提高应用程序的运行性能 提供模块化的程序设计功能 允许定义标示符 具有过程语言控制结构 具备 ...
- Angular4初学
[1].在学习Angular4之前,首先要了解一些typescript的知识. 以下是我的总结:https://gitee.com/FangXiaoQi123/angularJSCeShi/blob/ ...
- 简单了解HashCode()
在java的内部类中,计算HashCode通常使用 code = 元素* 31 + 下一个元素 以String为例 public int hashCode() { int h = hash; if ( ...
- 布隆过滤器 - 如何在100个亿URL中快速判断某URL是否存在?
题目描述 一个网站有 100 亿 url 存在一个黑名单中,每条 url 平均 64 字节.这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中? 题目解析 这 ...
- Fabric1.4源码解析: 链码容器启动过程
想写点东西记录一下最近看的一些Fabric源码,本文使用的是fabric1.4的版本,所以对于其他版本的fabric,内容可能会有所不同. 本文想针对Fabric中链码容器的启动过程进行源码的解析.这 ...