前面分享完图的概念和图的几种存储结构后,我们趁热打铁来看看图的遍历吧。图的遍历主要有两种方式——深度优先遍历(DFS)和广度优先遍历(BFS)。这其实是两种很重要的算法,如果你经常刷算法题,你会经常遇到它们。这两种算法的题目真的很多。以后的leetcode也会重点分享这类题目。好啦,下面重点来讲解这两种遍历算法吧

1.深度优先遍历(BFS):

从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。

基本实现方法:

在下图假设约定右手原则(用的比较多):在没有碰到重复顶点的情况下,分叉路口始终是向右手边走,每路过一个顶点就做一个记号。(大家有没有发现很想树的先序遍历)。这里深度优先遍历的结果是不唯一的。

如图:(注意是从上往下看的右边哦)

此图的访问次序是:ABCDEFGHI

用邻接矩阵这种存储结构来表示无向图的深度优先遍历需要引入一个visited数组,值为1表示被访问过,值为0表示没被访问过。从起点开始,从矩阵图中找1的结点,若它的visited值为0,就依次访问下去,为1时就退回上一个结点。

如果它的存储结构确定了,那它的遍历顺序也就定了,不会出现很多种情况了

算法实现:

深度遍历要根据图的稀疏或稠密来确定使用那种存储结构实现深度遍历,和前面一样,稠密图用邻接矩阵,稀疏图用邻接表。

非连通图的遍历就类似先遍历一个连通图,再遍历另一个连通图。

2.广度优先遍历(DFS):

从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0 有路径相通的顶点都被访问到。

用邻接表和循环队列以及visited数组来实现算法:首先访问v1,就把v1的下标放在队列中,然后R

指针向上移动一位。访问后v1下标出队,F指针也向上移动。再把表的右边如图的1,2放入队列中,R向上移动两位。再将v2,v3的邻接点依次入队,R指针也依次向上移动。注意将某节点的邻接点出队后,该结点就消失,为后面的结点出队创造空间,同时F指针向上移动一位。已访问过的结点的visited值为1.依次循环下去,直到全部顶点的visited值都为1.

算法实现:

注意,深度优先遍历的广度优先遍历的时间复杂度是一样的。

好啦,关于图的遍历两种算法的基本内容就到这啦,下期会分享一篇这两种算法具体的完整实现代码。

本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.

数据结构之图的基础知识(二)相关推荐

  1. 数据结构:图的基础知识

    文章目录 图 图论基础 图的定义 图的基本概念 图的存储结构 邻接矩阵 邻接表 图的创建和销毁* 图的遍历算法 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 最小生成树 Prim 算法 Kr ...

  2. (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】

    JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...

  3. CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释

    CV:计算机视觉技术之图像基础知识(二)-图像内核的可视化解释 目录 图像内核的可视化解释 测试九种卷积核 官方Demo DIY图片测试 DIY实时视频测试 相关文章 CV:计算机视觉技术之图像基础知 ...

  4. CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)

    CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...

  5. oracle:oracle基础知识(二)

    oracle基础知识(二)笔记:高级查询 文章目录 分组查询 多属性分组语法: 过滤查询 group by 语句增强 sqlplus报表功能 多表查询 等值连接 外连接 自连接 子查询 子查询中的空值 ...

  6. 网络基础知识(二) HTTP

    网络基础知识(二) HTTP 黑发不知勤学早,白首方悔读书迟. 内容参考:https://www.runoob.com/http/http-content-type.html HTTP协议是Hyper ...

  7. CV:计算机视觉技术之图像基础知识(二)—图像内核的九种卷积核可视化解释(blur/bottom sobel /emboss/identity /sobel /outline/sharpen)

    CV:计算机视觉技术之图像基础知识(二)-图像内核的九种卷积核可视化解释(blur/bottom sobel /emboss/identity /left sobel /outline/right s ...

  8. scikit-learn学习基础知识二

    scikit-learn学习基础知识二 文章目录 scikit-learn学习基础知识二 一.介绍 二.代码实现 三.运行结果 四.总结 一.介绍 本文我们学习scikit-learn中的KNeigh ...

  9. 数据结构之树的基础知识

    y今天我们翻开新的篇章,在结束了前面一对一的线性表后,我们来看看一对多的树.树这种数据结构其实在我们生活中也是很常见的,应用也是很广的.和线性表,图共同占据算法界的半壁江山(hhh,博主自己脑补的)所 ...

  10. kettle对字符串去除空格_整理|ABAP基础知识二:常用字符串处理

    常用字符串处理 上一期整理了ABAP的数据类型和定义,今天我们整理一下开发过程中常见的字符串处理命令.虽然说这些基础知识对于已经熟练使用Ctrl c + Ctrl v的资深码农来说过于简单.但是对于一 ...

最新文章

  1. Leangoo团队敏捷开发实现过程
  2. 【机器学习基础】数学推导+纯Python实现机器学习算法1:线性回归
  3. Ubuntu14.04引导菜单修复
  4. .NET CORE 2.1 导出excel文件的两种方法
  5. mclmcrrt77 matlab,mclmcrrt77.dll下载
  6. mysql数据库表的类型介绍,mysql数据库表的类型介绍
  7. 2016年《大数据》高被引论文Top10
  8. MySQL里的日期技巧
  9. 解决mysql无法启动,错误1067
  10. 创建一个1000w个随机浮点数的数组
  11. 中国大学MOOC(慕课)离线下载视频支持电脑播放
  12. Echarts5.3.0-南丁格尔玫瑰图之半圆
  13. 洛谷——P2342 叠积木
  14. 最强脱单指南:如何通过区块链应用快速找到女朋友?
  15. 如何删除子域信任关系
  16. txt文件合并方法(不需要工具)
  17. 制作Code128B一维条形码的综合教程
  18. idea的运行按钮是灰色的解决办法
  19. NC 开发各种常用方法
  20. 除了PMP,项目经理还有哪些证书值得考?

热门文章

  1. INT 10H显示字符串的小例子
  2. 简易地图(MKMapView,CLLocationManagerDelegate,CLGeocoder)
  3. 【2019】【论文笔记】基于混合石墨烯金属结构的可重构THz Vivaldi天线——
  4. 如何将windows桌面默认位置修改为D盘
  5. Transformer(李宏毅2022)
  6. 网络传输的七层协议(包括tcp协议和udp协议的区别)
  7. 使用python给微信推送信息(一)
  8. 国际学术期刊排名按照姓氏字母排吗?
  9. DES 加密解密方法
  10. 5分钟带你了解Prosody XMPP Server