文章目录

  • 前言
  • 一、BFS是什么?
  • 二、BFS的使用步骤?
  • 三、迷宫问题
  • 总结

前言

上篇讲了DFS(深度优先算法),那么肯定也要讲BFS(广度优先算法),两者一般都是绑定一起来讲的。两者也有着不同的用处。


一、BFS是什么?

先用百度百科的来讲:

BFS(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法Prim最小生成树算法都采用了和广度优先搜索类似的思想。属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

简单来说,BFS是一种图搜索的算法,目的是用于搜索检查每一个可以达到的点,直到找到结果为止。他和DFS的区别:DFS是一条路走到黑,如果没用路就返回,而BFS是从上往下层次依序遍历,我们一般用队列来实现BFS的遍历。

图解:(箭头的遍历方式)1 -> 2 -> 3 -> 4 -> 5 - > 6 -> 7 - > 8 - > 9 -> 10;

二、BFS的使用步骤

可以分为四个步骤:初始化(初始化队列和所求的值) -> 判空取队头(判断是否为空并取出队头) -> 拓展(利用队头去扩展) -> 判断入队(如果符合,将该点入队)。

void bfs(){queue<int>q;q.push(初始位置);//初始化while(q.size()){int t = q.front();q.pop();//取出队头的点,用该点向周围扩散。if(check(j)){       //如果该点可行就将它加入队列中q.psuh(j);      //实施相应的操作 }}
} 

三、迷宫问题

迷宫问题:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
typedef pair<int, int>PII;
const int N = 110;
int g[N][N], d[N][N];
int n, m;int bfs(){//初始化memset(d, -1, sizeof d);queue<PII>q;q.push({0, 0});d[0][0] = 0;int dx[4] = {0, -1, 1, 0}, dy[4] = {1, 0, 0, -1};while(q.size()){//判空取头PII t = q.front();q.pop();//拓展for(int i = 0; i < 4; i ++){int x = t.first + dx[i], y = t.second + dy[i];if(x >= 0 && x < n && y >= 0 && y < m && d[x][y] == -1 && g[x][y] == 0){//入队并实施相应操作。q.push({x, y});d[x][y] = d[t.first][t.second] + 1;}}}return d[n - 1][m - 1];
}
int main(){cin >> n >> m;for(int i = 0; i < n; i ++){for(int j = 0; j < m; j ++){cin >> g[i][j];}}cout << bfs() << endl;return 0;
}

总结:

这只是浅谈一下BFS,BFS算法还有很多方面,我会在后面慢慢更新博客讲解,阅读完这一篇文章,可以看看上篇的DFS的讲解:

DFS的链接:     DFS (深度优先算法)_1234_6的博客-CSDN博客

BFS(广度优先算法)相关推荐

  1. BFS广度优先算法, DFS深度优先算法,Python,队列实现,栈实现

    来源:https://www.bilibili.com/video/BV1Ks411575U/?spm_id_from=333.788.videocard.0 BFS广度优先算法 graph = {& ...

  2. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)

    刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java) https://www.lanqiao.cn/problems/234/learning/ http://lx.lanqia ...

  3. BFS——广度优先算法(Breadth First Search)

    1.前言 这几天刷leetcode经常碰到DFS BFS的问题,之前一直也是模棱两可,凭着感觉做,是需要总结一下了. 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历 ...

  4. 猎人抓兔子 - (广度优先算法)

    题目描述: 假设有一只兔子,有4个排成一排的洞,编号为1和4.兔子每天晚上跳到相邻的一个洞里住,2号洞可以跳1号和3号洞,4号洞只能跳3号洞.而猎人每天白天检查其中的一个洞.猎人告诉你每天检查的洞的编 ...

  5. java实现广度优先算法

    实现思路 广度优先方式,是一种地毯式搜索,层层递进的方式,即从开始节点依次遍历相邻节点,层层递进 代码实现 基于之前图的数据结构,实现广度优先算法 import java.util.*;/*** 邻接 ...

  6. (造轮子)C 创建队列和图实现广度优先算法(BFS)和深度优先算法(DFS)(数据结构)

    链表.队列和图实现BFS和DFS算法(C+造轮子+详细代码注释) 1.队列的链式存储结构   队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表.头指针指向队头节点,尾指针指向 ...

  7. c语言bfs算法走迷宫,使用广度优先算法(BFS)走迷宫

    前面介绍广度优先算法的时候提及了多次走迷宫,我们就真正的走一次迷宫试试! 要求如下: 输入给出迷宫矩阵的行数和列数,并给出迷宫(使用点 (.) 表示路,使用星 (*) 表示障碍物,使用S表示起点,T表 ...

  8. ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(三)

    本文为:ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第三篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...

  9. 深度优先算法(DFS)和广度优先算法(BFS)时间复杂度和空间复杂度计算精讲

    现在我们设定任务为到山东菏泽曹县买牛逼,需要利用深度优先算法(DFS)和广度优先算法(BFS)在中国.省会.市.区县这张大的树中搜索到曹县,那么这个任务Goal就是找到曹县. 假如图的最大路径长度m和 ...

  10. 广度优先算法(BFS)

    根据访问节点的顺序与方式,可以分为广度优先算法(BFS)和深度优先算法(DFS),本文我打算先介绍广度优先算法: 广度优先算法 1. 算法概述 广度优先搜索算法(又称宽度优先搜索.BFS)是最简便的图 ...

最新文章

  1. SpringMVC学习二
  2. python变量类型-【干货】Python基础语法之变量类型
  3. java 采集rtsp_通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口步骤概览
  4. 鸿蒙思维和小央美,中心路汝南路站附近艺术培训
  5. Mac下安装MySQL
  6. wxpython pyqt_python gui 中三大框架tkinter ,wxpython, pyqt如何选择
  7. CCF201403-2 窗口(100分)
  8. SpringCloud Feign使用详解
  9. MVVM设计模式和在WPF中的实现(四) 事件绑定
  10. 论文降重,你都用了什么奇特的方法?
  11. 合成大西瓜小游戏微信小程序源码/微信游戏小程序源码
  12. 形容计算机技术发展的词,形容技术发展的成语是什么_四字词语 - 成梦词典
  13. php 数字英文中文版,php过滤只保留中文,英文以及数字的方法
  14. 李大仁是真的爱程又青
  15. PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
  16. SlideShow Pro(幻灯片制作)v5.0.0.10绿色中文版
  17. Strurts(四)——从Struts原型模拟看大道至简(含实例下载)
  18. 微信小程序的图形验证码实现
  19. Docker基础(下)
  20. 模仿360安全卫士项目笔记8

热门文章

  1. OpenCV之IplImage详解
  2. Mat 与 IplImage之间的转换
  3. 取消Win7驱动数字签名认证
  4. 医学系统(一)医院常用的软件系统:PACS系统、HIS系统、RIS系统、LIS系统、CIS系统
  5. Java实现国密电子签章(itext+bouncycastle +sm3withsm2)
  6. printf输出格式化
  7. QQ小游戏 微信小游戏 即时通信 IM 删除会话 deleteConversation sdk
  8. Log4j配置详解,太详细了。
  9. 2021年关于Delphi/Object Pascal编程语言的现状和历史
  10. 计算机科学与技术导论结课报告,计算机科学与技术导论课程报告.doc