图之遍历--广度优先遍历
何为广度优先遍历呢?
广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去。
基本思想是:
下面给出广度优先遍历的例子:(广度优先遍历不是唯一的哦,只要满足“广度”的含义即可)
访问顺序为:0,2,1,5,3,4(看图很快就可得知)(将离根节点最近的节点先遍历出来,再继续深挖下去。)
知道了BFS之后,我们又要怎么通过编程来实现BFS呢?
下面给上详细的分析:
首先,先准备一个队列(利用队列的结构)和一个Set(Set用来作为类似于注册的作用,防止节点重复进入队列)
step1.先把根节点1放入队列中,同时将1注册到set中去,证实它进过队列(上面两步是同步的)
step2.把1poll出来,同时打印出来(System.out...)(前面两步也是同步的),同时将1的所有next节点都放到队列中去(放到队列中去时要提前判断这些元素之前是否有注册过,即有没有在set中)
step3.如果一个节点已经没有next节点的时候,那就直接将该节点弹出去就行,不用注册也不用添加到队列中。
下面流程图可以用来参考,下面也有源代码,源代码有注释,很好理解,看不清楚的欢迎留言~
下面附上源代码:
图之遍历--广度优先遍历相关推荐
- 【图】深度优先遍历 广度优先遍历
文章目录 一.广度优先遍历 二.深度优先遍历 深度优先遍历和广度优先遍历是遍历图的两种常见方式,接下来就通过这两种方式来实现一下图具体遍历的过程 当我位于游乐园的景区 A 时,为了玩遍所有的景区我们有 ...
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...
- 八数码宽度优先搜索python代码_图之遍历--广度优先遍历
何为广度优先遍历呢? 广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去. 基本思想是: 1.从图中某个顶点V0 ...
- 图的深度广度优先遍历(DFC与BFC)JavaScript版
graph.js 创建一个js文件用于表示图这个类型,这个对象的键为节点,所对应的值为这个节点所连接的节点. const graph={0:[1,2],1:[2],2:[0,3],3:[3] }; m ...
- 图深度优先、广度优先遍历(java)
一.图的遍历 图的遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:(1)深度优先遍历(2)广度优先遍历深度优先遍历基本思想. 二.深度优先遍历 图的深 ...
- 图的遍历 广度优先遍历(爱思创)
前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 问题描述: 读入一个用邻接矩阵存储的无向连通图,输出它的广度(宽度)优先遍历序列. 输入格式 第一行一个正整数 n(2≤n≤100) ...
- 【数据结构】图的深度优先遍历 广度优先遍历
文件操作比直接输入方便许多 #include <stdio.h> #include <stdlib.h> #include <string.h> #define M ...
- 图的理解:深度优先和广度优先遍历及其 Java 实现
遍历 图的遍历,所谓遍历,即是对结点的访问.一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: 深度优先遍历 广度优先遍历 深度优先 深度优先遍历,从初始访问结点出发,我们知道 ...
- 大话数据结构 17:图的深度优先遍历和广度优先遍历
深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底-,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点 ...
最新文章
- 《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.4节单位和度量
- C++拷贝构造函数、深拷贝、浅拷贝
- java 坐标系转换_入门-Python-GIS坐标转换
- 51CTO的技术门诊谈OSSIM
- cs6序列号 mac版photoshop_重磅!Parallels Desktop 16 M1版发布
- java中报错convension_LambdaConversionException与泛型:JVM错误?
- 网易架构师深入讲解Java开发!BAT等大厂必问技术面试题
- 编写运行java的步骤,【简答题】编写运行Java程序需要经过哪些主要步骤? (30.0分)...
- androidpn 推送初探
- 《Android开发从零开始》——31.模拟Http请求
- 群体智能优化算法之狩猎搜索(Hunting Search,Hus)
- 大学生计算机考试系统软件,我爱C”《大学计算机基础》考试系统学生端软件使用说明.doc...
- 快捷指令通知运行html,快捷指令通知怎么关?快捷指令通知关了又自动开了的原因...
- 市场对计算机专业的需求是怎么样的,计算机专业的行业需求分析
- python关于二手房的课程论文_python爬取链家二手房信息
- 流程引擎之Flowable简介
- Android:WebView使用常见问题汇总(持续更新)
- Ruby On Rails 阿里云UBUNTU实例
- Python递归函数应用之计算阶乘
- springboot2.0 的ssl证书配置
热门文章
- stl max函数_C ++ STL中带有示例的array :: max_size()函数
- MFC操作Excel2003的CRange类的Copy函数和Delete函数实现方法
- Ubuntu16.04下安装cuda和cudnn的三种方法(亲测全部有效)
- hive序列生成_常见的序列化框架及Protobuf原理
- srand(设置随机数种子)
- java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)
- 疯狂java讲义价格_疯狂java讲义
- android 滑动接听源码,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...
- 功放音量调节原理_玩汽车音响,功放和喇叭,应该如何做好匹配?
- echarts symbol 回调函数_【OpenLayer 实战】实现仿Echarts风格的动态迁徙图/航班图