何为广度优先遍历呢?

广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去。

基本思想是:

1、从图中某个顶点V0出发,并访问此顶点;
2、从V0出发,访问V0的各个未曾访问的邻接点W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点;
3、重复步骤2,直到全部顶点都被访问为止。

下面给出广度优先遍历的例子:(广度优先遍历不是唯一的哦,只要满足“广度”的含义即可)

访问顺序为:0,2,1,5,3,4(看图很快就可得知)(将离根节点最近的节点先遍历出来,再继续深挖下去。)

知道了BFS之后,我们又要怎么通过编程来实现BFS呢?

下面给上详细的分析:

首先,先准备一个队列(利用队列的结构)和一个Set(Set用来作为类似于注册的作用,防止节点重复进入队列)

step1.先把根节点1放入队列中,同时将1注册到set中去,证实它进过队列(上面两步是同步的)

step2.把1poll出来,同时打印出来(System.out...)(前面两步也是同步的),同时将1的所有next节点都放到队列中去(放到队列中去时要提前判断这些元素之前是否有注册过,即有没有在set中)

step3.如果一个节点已经没有next节点的时候,那就直接将该节点弹出去就行,不用注册也不用添加到队列中。

下面流程图可以用来参考,下面也有源代码,源代码有注释,很好理解,看不清楚的欢迎留言~

下面附上源代码:

图之遍历--广度优先遍历相关推荐

  1. 【图】深度优先遍历 广度优先遍历

    文章目录 一.广度优先遍历 二.深度优先遍历 深度优先遍历和广度优先遍历是遍历图的两种常见方式,接下来就通过这两种方式来实现一下图具体遍历的过程 当我位于游乐园的景区 A 时,为了玩遍所有的景区我们有 ...

  2. 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程

    图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...

  3. 八数码宽度优先搜索python代码_图之遍历--广度优先遍历

    何为广度优先遍历呢? 广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去. 基本思想是: 1.从图中某个顶点V0 ...

  4. 图的深度广度优先遍历(DFC与BFC)JavaScript版

    graph.js 创建一个js文件用于表示图这个类型,这个对象的键为节点,所对应的值为这个节点所连接的节点. const graph={0:[1,2],1:[2],2:[0,3],3:[3] }; m ...

  5. 图深度优先、广度优先遍历(java)

    一.图的遍历 图的遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:(1)深度优先遍历(2)广度优先遍历深度优先遍历基本思想. 二.深度优先遍历 图的深 ...

  6. 图的遍历 广度优先遍历(爱思创)

    前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 问题描述: 读入一个用邻接矩阵存储的无向连通图,输出它的广度(宽度)优先遍历序列. 输入格式 第一行一个正整数 n(2≤n≤100) ...

  7. 【数据结构】图的深度优先遍历 广度优先遍历

    文件操作比直接输入方便许多 #include <stdio.h> #include <stdlib.h> #include <string.h> #define M ...

  8. 图的理解:深度优先和广度优先遍历及其 Java 实现

    遍历 图的遍历,所谓遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: 深度优先遍历 广度优先遍历 深度优先 深度优先遍历,从初始访问结点出发,我们知道 ...

  9. 大话数据结构 17:图的深度优先遍历和广度优先遍历

    深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底-,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点 ...

最新文章

  1. 《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.4节单位和度量
  2. C++拷贝构造函数、深拷贝、浅拷贝
  3. java 坐标系转换_入门-Python-GIS坐标转换
  4. 51CTO的技术门诊谈OSSIM
  5. cs6序列号 mac版photoshop_重磅!Parallels Desktop 16 M1版发布
  6. java中报错convension_LambdaConversionException与泛型:JVM错误?
  7. 网易架构师深入讲解Java开发!BAT等大厂必问技术面试题
  8. 编写运行java的步骤,【简答题】编写运行Java程序需要经过哪些主要步骤? (30.0分)...
  9. androidpn 推送初探
  10. 《Android开发从零开始》——31.模拟Http请求
  11. 群体智能优化算法之狩猎搜索(Hunting Search,Hus)
  12. 大学生计算机考试系统软件,我爱C”《大学计算机基础》考试系统学生端软件使用说明.doc...
  13. 快捷指令通知运行html,快捷指令通知怎么关?快捷指令通知关了又自动开了的原因...
  14. 市场对计算机专业的需求是怎么样的,计算机专业的行业需求分析
  15. python关于二手房的课程论文_python爬取链家二手房信息
  16. 流程引擎之Flowable简介
  17. Android:WebView使用常见问题汇总(持续更新)
  18. Ruby On Rails 阿里云UBUNTU实例
  19. Python递归函数应用之计算阶乘
  20. springboot2.0 的ssl证书配置

热门文章

  1. stl max函数_C ++ STL中带有示例的array :: max_size()函数
  2. MFC操作Excel2003的CRange类的Copy函数和Delete函数实现方法
  3. Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)
  4. hive序列生成_常见的序列化框架及Protobuf原理
  5. srand(设置随机数种子)
  6. java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)
  7. 疯狂java讲义价格_疯狂java讲义
  8. android 滑动接听源码,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...
  9. 功放音量调节原理_玩汽车音响,功放和喇叭,应该如何做好匹配?
  10. echarts symbol 回调函数_【OpenLayer 实战】实现仿Echarts风格的动态迁徙图/航班图