【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

2023-11-03

1. 图的遍历基本思路与方法

图的遍历的定义与visited数组

常用的遍历方法

  • 深度优先搜索遍历(Depth-First Search, DFS)
  • 广度优先搜索遍历(Breadth-First Search, BFS)

2.  深度优先搜索遍历(Depth-First Search, DFS)

思路

一条道走到黑,然后回头找分岔路。

PS: 就像玩游戏一口气玩到通关,回头找彩蛋

补充:非连通图中,走完一个联通分量后,到下一连通分量,任取一个起始点执行同样的算法。

例:

访问顺序:2-1-3-5-3-1-4-6-4-1-2(回到起点且visited全为1,结束)

注:Visited一开始全为0,访问后置1

算法实现1(采用邻接矩阵表示图的深度优先搜索遍历)

数据结构与算法王卓-习题-第六章图-采用邻接矩阵表示图的深度优先搜索遍历(DFS)算法_Finale_R的博客-CSDN博客目录算法描述算法预期效果重难点思路个人解法总结测试样例与输出算法描述创建图的邻接矩阵, 并输出dfs深度优先搜索遍历结果算法预期效果依次输入顶点数,边数,顶点V1~Vn,边A1~An,根据输入的顶点与边的关系,输出形如右边的邻接矩阵,接着使用DFS进行深度优先遍历,输出所有结点。效果一:输出形如右边的邻接矩阵效果二:输出类似右下角的遍历结果重难点个人认为难点一是理解递归的结构,以及如何回退;难点二是visited数组如何声明与引用思路.https://blog.csdn.net/weixin_42189468/article/details/124084244?spm=1001.2014.3001.5501

算法实现2(采用邻接表表示图的深度优先搜索遍历) 

数据结构与算法王卓-习题-第六章图-采用邻接表表示图的深度优先搜索遍历(DFS)算法_Finale_R的博客-CSDN博客目录算法描述算法预期效果思路个人解法测试样例与输出(用的邻接矩阵的点阵图)算法描述创建无向图及其邻接表,打印。接着使用DFS进行图的遍历,打印。注:注意是连通图算法预期效果依次输入顶点数,边数,顶点V1~Vn,每条边依附的两个顶点,根据输入的顶点与边的关系,以链表结构构建无向网,与其邻接表。打印出邻接表,接着使用DFS进行深度优先遍历,输出所有结点。思路图来自王老师课件, 其实有邻接矩阵DFS经验的话这里可以直接写了个人解法#includehttps://blog.csdn.net/weixin_42189468/article/details/124166639

时间复杂度分析

为什么邻接表只需要扫描e个结点:因为同一条边出现两次,扫描过第一次就会被visited标记。 

3.  广度优先搜索遍历(Breadth-First Search, BFS)

思路

从v1顶点出发,找该顶点所有未被访问的邻接点,全部依次访问。然后对每一个邻接点执行同样的算法。

PS: 就像玩游戏找齐一张地图的所有成就再进下一关

补充:非连通图中,走完一个联通分量后,到下一连通分量,任取一个起始点执行同样的算法。

设计过程

使用邻接表描述图进行BFS算法,则除了邻接表以外,再引入一个辅助队列。(由树的层次优先遍历算法启发,依次根结点入队,左右子树入队),以及一个visited数组。

算法实现1(采用邻接表表示图的广度优先搜索遍历)

数据结构与算法王卓-习题-第六章图-采用邻接表表示图的广度优先搜索遍历(BFS)算法_Finale_R的博客-CSDN博客目录算法描述算法预期效果重难点思路个人解法总结测试样例与输出参考资料算法描述创建无向图以及其邻接表,打印关系, 并输出bfs广度优先搜索遍历结果算法预期效果依次输入顶点数,边数,顶点V1~Vn,每条边依附的两个顶点,根据输入的顶点与边的关系,以链表结构构建无向网,与其邻接表。打印出邻接表,接着使用BFS进行广度优先遍历,输出所有结点。重难点FirstAdjVex和NextAdjVex的定义(最后没有额外声明,逻辑放在bfs内部了);vst怎么优雅的https://blog.csdn.net/weixin_42189468/article/details/124160361

算法实现2(采用邻接矩阵表示图的广度优先搜索遍历) 

数据结构与算法王卓-习题-第六章图-采用邻接矩阵表示图的广度优先搜索遍历(BFS)算法_Finale_R的博客-CSDN博客目录算法描述算法预期效果重难点个人解法总结测试样例与输出算法描述创建图的邻接矩阵, 并输出bfs广度优先搜索遍历结果算法预期效果依次输入顶点数,边数,顶点V1~Vn,边A1~An,根据输入的顶点与边的关系,输出形如右边的邻接矩阵,接着使用BFS进行广度优先遍历,输出所有结点。效果一:输出形如右边的邻接矩阵效果二:输出类似右下角的遍历结果重难点使用非递归的结构,如何有序且不重复的遍历结点;visited数组如何声明与引用个人解法#inchttps://blog.csdn.net/weixin_42189468/article/details/124100005?spm=1001.2014.3001.5502

时间复杂度与空间复杂度:DFS与BFS的比较

空间复杂度相同,两种算法都借助的是栈或队列。

时间复杂度与算法无关,只与存储结构有关,若为邻接矩阵则为O(n²),若为邻接表则为O(n+e)

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

【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS) 的相关文章

随机推荐

  • 微信小程序获取用户手机号

    微信小程序获取用户手机号需要企业小程序 个人小程序是无法获取到手机号的 我们先看看官方的解释 获取手机号 获取微信用户绑定的手机号 需先调用wx login接口 因为需要用户主动触发才能发起获取手机号接口 所以该功能不由 API 来调用 需
  • mysql脏读,幻读,不可重复读以及间隙所解决幻读

    1 数据脏读 事务a修改了某条数据 然后事务b读取了事务a修改的该条数据 然后事务a由于某些原因 事务a回滚了 这样事务b读到的数据就和回滚的数据不同了 这时事务b读取的数据就是脏数据 概况一句话就是一个事务读取了另一个事务未提交的数据 2
  • 免费看小说,国产浏览器出手了,吊打各类阅读软件

    一 UC浏览器 小说多且免费 UC浏览器提供了非常方便的小说阅读体验 用户可以随意选择自己想要阅读的小说网站 并且一键切换到纯净的阅读模式 享受真正的沉浸式阅读 此外 UC浏览器还自带书城 用户可以在这里找到各种受欢迎的小说 避免书荒 书城
  • webpack-dev-server配合nginx启动时遇到热替换模块请求跨域

    当本地URL已经用Nginx代理 例如http vue native guahao inc 代理到http vue native guahao inc com不带端口号时 本地的webpack dev server会遇到请求热更新的json
  • android.accounts包

    包 android accounts 英文原文 http developer android com reference android accounts package summary html 版本 Android 4 0 r1 译者署
  • 概率论与数理统计

    概率论与数理统计 一 概率论基本概述 1 1 随机试验 1 2 样本空间与随机事件 1 3 频率与概率 1 4 古典概型 1 5 条件概率 1 6 独立性 二 随机变量及其分布 2 1 随机变量 2 2 离散型随机变量及其分布 2 3 随机
  • mbed OS会成为物联网的 Android 吗?

    转载至 http www mbed org cn archives mbed os E4 BC 9A E6 88 90 E4 B8 BA E7 89 A9 E8 81 94 E7 BD 91 E7 9A 84 android E5 90 9
  • 使用远程服务器总是因网络中断、终端不小心关闭、锁屏等导致程序中断

    分享编程工具实用方法 面对无穷无尽的配置bug 其他文章 Windows连接远程Linux服务器 VSCode配置 免密设置 跳板机配置 GeForce RTX 3090无法使用mmsegmentation官方推荐cuda版本 ubuntu
  • 计算机辅助实验圆弧连接画法,机械制图基础-18、圆弧连接的画法

    绘图时 经常要用已知半径的圆弧 但圆心要在作图中确定 这样的圆弧 称为连接圆弧 连接圆弧需要光滑连接已知直线或圆弧 光滑连接也就是要在连接点处相切 为了保证相切 必须准确地作出连接圆弧的圆心和切点 一 用已知半径为R的圆弧连接两条已知直线
  • 超七成阅读APP都借百度语音技术促用户增长

    全国十多亿人在这个春节集体 关门闭户 与手机和网络作伴 除了手游和短视频流量飞涨 在线阅读也迎来 高光时刻 特别是当手机阅读APP标配了语音朗读即 听书 功能 据百度大脑AI开放平台的后台数据显示 疫情期间 支持 听书 功能的语音合成技术的
  • 重新映射图像——OpenCV Remap实例

    重新映射图像 OpenCV Remap实例 在计算机视觉领域中 图像的几何变换是一项重要的工作 重要的任务之一是将图像转换为其他形式 例如投影或扭曲 OpenCV的Remap函数提供了一个简单和灵活的方法来执行这种类型的变换 下面展示了如何
  • unsigned char 数值溢出问题

    include
  • 在D盘使用SVN检出文件后,整个盘出现蓝色问号的解决办法。

    在D盘使用SVN检出文件后 整个盘出现蓝色问号的解决办法 原因 在该盘的根目录执行了checkout操作 SVN将整个盘作为了一个版本库的本地副本 那些问号表示这些文件没有被SVN控制 解决方法 1 在文件上右击 选择TortoiseSVN
  • android studio电影院选座,8排电影院选座最佳位置

    8排电影院选座最佳位置在哪里呢 8排电影院属于小影厅 小影厅银幕宽度在10米以下 座位100以内 座位排数通常拥有8 14排 小影厅整体空间小 选座时要选中间稍靠后一些的位置 由于整体排数少 因此选即便选择靠后一些的排数实际上距银幕的距离也
  • ubuntu 同时使用无线网卡和有线网卡

    转载于这位博主 文章
  • Ubuntu18.04 取消开机密码 实现自动登录

    因为要把Ubuntu设备作为服务器 实现开机自动运行服务程序 所以需要取消开机密码 实现自动登录 1 点击桌面右上角向下的箭头 点击设置图标 2 点击右上角的 Unlock 3 在弹出的窗口中输入系统登录密码 点击右下角 Authentic
  • OpenMP并行编程

    1 总览 OpenMP Open Multi Processing 是一种用于共享内存并行系统的多线程程序设计方案 支持的编程语言包括C C 和Fortran OpenMP提供了对并行算法的高层抽象描述 通过线程实现并行化 特别适合在多核C
  • springboot使用logback日志框架超详细教程

    前言 项目中日志系统是必不可少的 目前比较流行的日志框架有log4j logback等 可能大家还不知道 这两个框架的作者是同一个人 Logback旨在作为流行的log4j项目的后续版本 从而恢复log4j离开的位置 另外 slf4j Si
  • 阶乘约数

    include
  • 【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

    1 图的遍历基本思路与方法 图的遍历的定义与visited数组 常用的遍历方法 深度优先搜索遍历 Depth First Search DFS 广度优先搜索遍历 Breadth First Search BFS 2 深度优先搜索遍历 Dep