图论(四)宽度优先搜索BFS

2023-10-27

宽度优先搜索(BFS, Breadth First Search)是一个针对图和树的遍历算法。发明于上世纪50年代末60年代初,最初用于解决迷宫最短路径和网络路由等问题。

对于下面的树而言,BFS方法首先从根节点1开始,其搜索节点顺序是1,2,3,4,5,6,7,8。
这里写图片描述
BFS使用队列(queue)来实施算法过程,队列(queue)有着先进先出FIFO(First Input First Output)的特性,BFS操作步骤如下:
1、把起始点放入queue;
2、重复下述2步骤,直到queue为空为止:
1) 从queue中取出队列头的点;
2) 找出与此点邻接的且尚未遍历的点,进行标记,然后全部放入queue中。

下面结合一个图(graph)的实例,说明BFS的工作过程和原理:
(1)将起始节点1放入队列中,标记为已遍历:
这里写图片描述
(2)从queue中取出队列头的节点1,找出与节点1邻接的节点2,3,标记为已遍历,然后放入queue中。
这里写图片描述
(3)从queue中取出队列头的节点2,找出与节点2邻接的节点1,4,5,由于节点1已遍历,排除;标记4,5为已遍历,然后放入queue中。
这里写图片描述
(4)从queue中取出队列头的节点3,找出与节点3邻接的节点1,6,7,由于节点1已遍历,排除;标记6,7为已遍历,然后放入queue中。
这里写图片描述
(5)从queue中取出队列头的节点4,找出与节点4邻接的节点2,8,2属于已遍历点,排除;因此标记节点8为已遍历,然后放入queue中。
这里写图片描述
(6)从queue中取出队列头的节点5,找出与节点5邻接的节点2,8,2,8均属于已遍历点,不作下一步操作。
这里写图片描述
(7)从queue中取出队列头的节点6,找出与节点6邻接的节点3,8,9,3,8属于已遍历点,排除;因此标记节点9为已遍历,然后放入queue中。
这里写图片描述
(8)从queue中取出队列头的节点7,找出与节点7邻接的节点3, 9,3,9属于已遍历点,不作下一步操作。
这里写图片描述
(9)从queue中取出队列头的节点8,找出与节点8邻接的节点4,5,6,4,5,6属于已遍历点,不作下一步操作。
这里写图片描述
(10)从queue中取出队列头的节点9,找出与节点9邻接的节点6,7,6,7属于已遍历点,不作下一步操作。
这里写图片描述
(11)queue为空,BFS遍历结束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图论(四)宽度优先搜索BFS 的相关文章

  • (笔试前准备)字符串匹配算法总结

    我想说一句 我日 我讨厌KMP KMP虽然经典 但是理解起来极其复杂 好不容易理解好了 便起码来巨麻烦 老子就是今天图书馆在写了几个小时才勉强写了一个有bug的 效率不高的KMP 特别是计算next数组的部分 其实 比KMP算法速度快的算法
  • findBug 错误修改指南

    FindBugs错误修改指南 1 EC UNRELATED TYPES Bug Call to equals comparing different types Pattern id EC UNRELATED TYPES type EC c
  • SDUT--OJ《数据结构与算法》实践能力专题训练6 图论

    A 数据结构实验之图论一 基于邻接矩阵的广度优先搜索遍历 Description 给定一个无向连通图 顶点编号从0到n 1 用广度优先搜索 BFS 遍历 输出从某个顶点出发的遍历序列 同一个结点的同层邻接点 节点编号小的优先遍历 Input
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • Android WiFi开发教程(二)——WiFi的搜索和连接

    在上一篇中我们介绍了WiFi热点的创建和关闭 如果你还没阅读过 建议先阅读上一篇文章Android WiFi开发教程 一 WiFi热点的创建与关闭 本章节主要继续介绍WiFi的搜索和连接 WiFi的搜索 搜索wifi热点 private v
  • JavaScript系列——数组元素左右移动N位算法实现

    引言 在自己刚刚毕业不久的时候 去了一家公司面试 面试官现场考了我这道题 我记忆深刻 当时没有想到思路 毫无疑问被面试官当成菜鸟了 最近刚好在研究数组的各种算法实现 就想到这道题 可以拿来实现一下 纪念自己逝去的青春 需求 假设有这样一个数
  • 数据结构——计算节点个数和二叉树高度(C语言版)

    摘自 数据结构 计算节点个数和二叉树高度 C语言版 作者 正弦定理 发布时间 2020 12 12 23 27 09 网址 https blog csdn net chinesekobe article details 111086664
  • 堆栈01--用两个栈实现队列

    堆栈01 用两个栈实现队列 jz05 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 测试用例 队列先进先出 输入 1 2 输出 1 2 解析
  • 如何防止过拟合和欠拟合

    过拟合和欠拟合是模型训练过程中经常出现的问题 两种情况正好相反 现将两者的定义及如何防止进行简要总结 1 过拟合 1 1 定义 是指模型对于训练数据拟合呈现过当的情况 反映到评估指标上就是模型在训练集上的表现很好 但是在测试集上的表现较差
  • 用指针访问一维数组

    文章目录 顺序查找 数组方式实现 指针实现方式 对一位数组元素的访问有三种方式 指针变量的关系运算 引例 数组实现方式 主函数 指针实现方式 主函数 一维数组作为函数的参数 实际应用 顺序查找 要求用指针实现 在整数集合r中顺序查找与给定值
  • Linux下进程退出的几种形式

    进程退出 Linux 下进程的退出分为正常退出和异常退出两种 1 正常退出 a 在main 函数中执行return b 调用exit 函数 c 调用 exit 函数 2 异常退出 a 调用about函数 b 进程收到某个信号 而该信号使程序
  • 区块链中的哈希算法

    区块链中的密码学 密码学在区块链中的应用主要有两个 哈希算法与非对称加密算法 这次主要对哈希算法进行详细的说明 哈希算法 哈希算法的特点有 1 输入可以为任意大小的字符串 2 产生固定大小的输出 3 可以在合理的时间内算出输出值 若要满足密
  • dfs玄学剪枝法集锦

    题解 第一题 邮票面值设计问题 这道题是一道比较经典的题目 在NOIP初赛 伤心 试卷上也出现过 由于这道题没有什么比较强的剪枝 因此就不介绍了 主要思路就是枚举最大值 完全背包问题 第二题 木棒 这道题我一开始是直接上爆搜的 由于只有两组
  • 查找数组中第二大的数

    快速找出一个数组中的最大数 第二大数 思路 如果当 前元素大于最大数 max 则让第二大数等于原来的最大数 max 再把当前元素的值赋给 max 如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值 则要把当前元素的值
  • Leetcode2661. 找出叠涂元素

    Every day a Leetcode 题目来源 2661 找出叠涂元素 解法1 哈希 题目很绕 理解题意后就很简单 由于矩阵 mat 中每一个元素都不同 并且都在数组 arr 中 所以首先我们用一个哈希表 hash 来存储 mat 中每
  • 牛客剑指offer刷题其他算法篇

    文章目录 构建乘积数组 题目 思路 代码实现 第一个只出现一次的字符
  • 数组实现循环队列(增设队列大小size)

    目录 一 前言 1 如何实现循环 2 如何判断队列为空 3 如何判断队列为满 二 循环队列的结构定义 三 循环队列的创建及其初始化 四 入队 五 出队 六 取队头元素 七 取队尾元素 八 循环队列判空 九 循环队列判满 十 循环队列销毁 一
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • 按照层次遍历结果打印完全二叉树

    按照层次遍历结果打印完全二叉树 按照推论结果 l 层首个节点位置 2 h l 1 l 层节点间距 2 h l 1 1 编码实现 public static
  • 最大流-Dinic算法,原理详解,四大优化,详细代码

    文章目录 零 前言 一 概念回顾 可略过 1 1流网络 1 2流 1 3最大流 1 4残留网络 1 5增广路

随机推荐

  • python输出100以内的素数

    可以使用以下代码来输出100以内的素数 for num in range 2 101 for i in range 2 num if num i 0 break else print num 这段代码使用了一个双重循环 外层循环遍历从2到1
  • 数字信号处理 --- 周期信号的三角函数表示 一(三角函数的性质和三角波的合成)

    三角函数的性质 一系列三角函数谐波 harmonic sinusoids 是傅里叶分析的基石 我们可以用这些不同频率的谐波构建各种各样的信号 波形 谐波 harmonics 现在我们选择一个频率为f0的任意频率 arbitrary freq
  • 杂谈:更新PowerShell 7.0.0后如何激活Anaconda环境?

    Preface 日前微软更新Powershell Core的版本至7 0 0 带来了很多新的特性 也带来了很多不同之处 例如启用了新的安装位置 去掉了Core的名称以及启用了新的可执行文件名称 将powershell exe修改为pwsh
  • 网络模型——OSI模型与TCP/IP模型

    文章目录 一 OSI七层模型 二 TCP IP协议 五层体系 三 OSI 参考模型与 TCP IP 参考模型的区别 四 TCP IP 五层协议的通信方式 OSI模型与TCP IP模型 对比如下 一 OSI七层模型 各层功能 应用层 应用层位
  • nginx(三十六)健康检查

    一 ngx http upstream module 官方自带 server 1 该指令用于 指定后端服务器 的名称和 optional 参数 2 服务器的名称可以是一个 域名 一个 ip地址 端口号或 unix socket upstre
  • 中间表示- 三地址码

    使用三地址码的编译器结构 三地址码的基本思想 1 给每个中间变量和计算结果命名 没有复合表达式 2 只有最基本的控制流 没有各种控制结构 if do while for等等 只有goto call等 3 所以三地址码可以看成是抽象的指令集
  • Java(七) 句柄

    在学习什么是句柄之前我们先学习虚拟机的对对象的访问方式 一 句柄访问方式 使用句柄访问对象 会在堆中开辟一块内存作为句柄池 句柄中储存了对象实例数据 属性值结构体 的内存地址 访问类型数据的内存地址 类信息 方法类型信息 对象实例数据一般也
  • 学习人工智能技术法则

    在当前的教育体系下 人工智能领域的人才培养依然以研究生教育为主 随着近些年来人工智能领域人才缺口的增大 格物斯坦表示目前已经一小部分高校开始陆续在本科阶段开设人工智能专业 相信随着人工智能领域的发展 未来更多专业的学生将有机会接触到人工智能
  • GRE、PPTP、L2TP隧道协议

    在IPSec 和Multiprotocol Label Switching MPLS VPN出现前 GRE被用来提供Internet上的VPN功能 GRE将用户数据包封装到携带数据包中 因为支持多种协议 多播 点到点或点到多点协议 如今 G
  • 数学建模-Topsis综合评价(评价模型)

    Topsis算法核心思想是逼近理想解的排序方法 正理想解 各指标都达到各候选方案的最好值 负理想解 各指标都达到各候选方案的最差值 基于有限个评价对象与理想化目标的接近程度进行排序 在现有的对象中进行相对优劣的评价 算法步骤 1 构造决策矩
  • arm-linux 应用层调用驱动函数

    需要调用头文件 include stdio h include unistd h unistd h 是 C 和 C 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件的名称 该头文件由 POSIX 1 标准 单一UNIX
  • 机考[41-50]

    华为机考 041 求解连续数列 042 求字符串中所有整数的最小和 043 求最多可以派出多少支团队 044 删除字符串中字符最少字符 045 数据分类 046 数列描述 047 数字涂色 048 数组二叉树 049 数组拼接 050 数组
  • MD5 加密算法详细介绍

    MD5是什么 message digest algorithm 5 信息 摘要算法 经常说的 MD5加密 就是它 信息 摘要算法 在下载一下东西时 经常在一些压缩包属性里 看到md5值 而且这个下载页面 很可能会在某一个地方 写了一句 此文
  • 同时存在js和jq时的相互定义转换

    div div div div
  • keras序列化模型 to json文件,保存模型和加载模型

    首先保存 1 模型结构 2 模型参数数据 usr bin env python coding utf 8 Author Jia ShiLin 模型的权重保存在HDF5中 模型的结构保存在JSON文件或者YAML文件中 Keras提供了to
  • Dbus数据总线(基于0.5.0) 深入理解,源码适配修改编译全过程,集群部署,使用操作

    声明 本文基于2018年10月份 发版的0 5版本进行安装实验 dbus产生背景 首先了解下当下的采集工具 1 我们发现 采集工具都有各自的优点和应用场景 但是都缺乏统一的数据源端管控 所以无法找到统一的数据入口 2 各个数据使用方在业务低
  • .ajax判断参数,vue.js获取ajax参数

    vue js获取ajax参数 内容精选 换一换 获取标签所有技术栈您可以在API Explorer中调试该接口 GET v2 stacks状态码 200状态码 403状态码 404状态码 406状态码 500获取标签所有技术栈状态码 200
  • 基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析

    本文主要讲述BootLoader程序升级原理及一些代码的解析 力图用通俗易懂的语言描述清楚BootLoader升级的主要关键点 BootLoader 升级原理概述 首次接触这一块时 有一个概念叫IAP 在应用编程 通俗一点讲便是通过一段已有
  • Latex公式自动编号与自动引用

    在进行latex引用时 有两种办法 一 被动引用 如有这样一段代码 x 2 y 2 z 2 eqno 1 1 In this paper we investigated 1 1 and applied it into some fields
  • 图论(四)宽度优先搜索BFS

    宽度优先搜索 BFS Breadth First Search 是一个针对图和树的遍历算法 发明于上世纪50年代末60年代初 最初用于解决迷宫最短路径和网络路由等问题 对于下面的树而言 BFS方法首先从根节点1开始 其搜索节点顺序是1 2