数据结构【图的遍历】

数据结构之图

  • 图的类型定义和存储结构
  • 图的遍历
    • 遍历的定义
    • 图的特点
    • 图常用的遍历
      • 深度优先搜索 DFS(DepthFirstSearch)
        • 算法实现
        • 算法效率分析
      • 广度优先搜索 BFS(BreadthFirstSearch)
        • 算法实现
        • 算法效率分析
      • DFS与BFS算法效率比较

图的类型定义和存储结构

图的遍历

遍历的定义

从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。
在这里插入图片描述

图的特点

图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。
那么怎样避免重复访问?
解决思路:设置辅助数组visitel[n],用来标记每个被访问过的顶点。
初始状态visited [i]为0,顶点i 被访问,改 visited [i]为1,防止被多次访问。

图常用的遍历

在这里插入图片描述

深度优先搜索 DFS(DepthFirstSearch)

方法:

  • 在访问图中某一起始顶点 v后,由 v出发,访问它的任一邻接顶点 w1;
  • 再从 w1 出发,访问与w1接但还未被访问过的顶点 w2;
  • 然后再从w2出发,进行类似的访问,如此进行下去,直至到达所有的邻接顶点都被访问过的顶点u为止;
  • 接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。
  • 如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;
  • 如果没有,就再退回一步进行搜索。
  • 重复上述过程,直到连通图中所有顶点都被访问过为止。

在这里插入图片描述

算法实现

采用邻接矩阵表示图的深度优先搜索遍历

void DFS(AMGraph G, int v)  //图G为邻接矩阵类型cout< <v; visited[v] = true;//访问第v个顶点for(w = 0; w< G.vexnum; w++)//依次检查邻接矩阵v所在的行if((G.arcs[v][w]!=0)&& (!visited[w]))DFS(G, w);//w是v的邻接点,如果w未访问,则递归调用DFS
算法效率分析

用邻接矩阵表示图,遍历图中的每一个顶点都要从头部扫描该顶点所在行,时间复杂度为O(n2)。

广度优先搜索 BFS(BreadthFirstSearch)

方法:
从图的某一节点出发,首先依次访问该节点的多有邻接节点Vi1,V2i,…再按照这些顶点被访问的先后次序,依次访问与他们相连接的所有被访问的顶点;
重复此过程,直到所有顶点均被访问为止。

算法实现
void BFS (Graph G, int v){//按广度优先非递归遍历连通图Gcout< <v; visited[v] = true;//访问第v个顶点InitQueue(Q);//辅助队列Q初始化,置空EnQueue(Q v);//v进队while(!QueueEmpty(Q)){//队列非空DeQueue(Q, u);//队头元素出队并置为ufor(w = FirstAdjVex(G, u); w>=0; w = NextAdjVex(G, u, w))if(!visited[w]){  //w为u的尚未访问的邻接顶点cout< <w; visited[w] = true; EnQueue(Q, w);//w进队3}}		
}//BFS
算法效率分析

如果使用邻接矩阵,则BFS对于每一个被访问到的顶点,都要循环检测矩阵的整整一行(n个元素),总的时间代价为O(n2)。
用邻接矩阵来表示图,虽然有2e个表节点,但是只需要扫描e个节点即可完成遍历,加上访问n个头节点的时间,时间复杂度为O(n+e)。

DFS与BFS算法效率比较

空间复杂度相同,都是O(n)(借用了堆栈或者队列)。
时间复杂度只与存储结构有关(邻接矩阵或者邻接表),而与搜索路径无关。

参考资料:数据结构与算法基础-王卓老师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444834.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity中开发程序打包发布

添加ESC脚本 使用Unity打包发布的过程中&#xff0c;考虑到打开的程序会处于全屏界面&#xff0c;而此时我们又会有退出全屏的需求&#xff0c;因此需要添加ESC脚本&#xff0c;当我们单击ESC脚本的过程中&#xff0c;退出全屏模式。 在Assets/Scenes下&#xff0c;创建esc.cs…

Qt应用开发(安卓篇)——调用ioctl、socket等C函数

一、前言 在 Qt for Android 中没办法像在嵌入式linux中一样直接使用 ioctl 等底层函数&#xff0c;这是因为因为 Android 平台的安全性和权限限制。 在 Android 中&#xff0c;访问设备硬件和系统资源需要特定的权限&#xff0c;并且需要通过 Android 系统提供的 API 来进行。…

前端开发实战基础——模块

文章目录 概要模块标识符模块依赖模块加载入口 CommonJS语法单例 AMD语法 UMD核心语法 ES6模块化模块标签及定义模块导出和导入命名导出和导入默认导出和导入命名导出和默认导出混用 模块行为 小结 概要 模块化&#xff0c;就是将代码拆分成独立的块&#xff0c;各自在代码块中…

Android Jetpack Compose之底部导航栏的实现

目录 1.概述2. 效果展示3. 代码实现3.1 定义底部导航栏的tab项3.2 整体页面架构搭建3.3 底部导航栏的实现3.4 所有代码 4.总结 1.概述 写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架Scaffold&#xff0c;利用它我们可以很快的实现一个现代APP的主流…

MySQL窗口函数--lead()函数

lead()函数&#xff1a; 查询当前行向下偏移n行对应的结果 该函数有三个参数&#xff1a;第一个为待查询的参数列名&#xff0c;第二个为向下偏移的位数&#xff0c;第三个参数为超出最下面边界的默认值。 如下代码&#xff1a; 查询向下偏移 2 位的年龄 SELECT user_id,user…

路灯哪个牌子好?2024年大路灯推荐合集

经常晚上学习的学生党、加班加点的打工人以及三更半夜备考的考公考研人士都看过来&#xff01;你是否经常会出现眼睛酸痛、干涩、疲劳的情况&#xff0c;并且注意力不集中&#xff0c;长期下来不仅工作学习效率低&#xff0c;而且视力也受到了影响。这是一大部分原因是因为长期…

前端通过nginx,访问一个文件夹里面的全部数据,nginx 咋配置

目录 1 问题2 实现 1 问题 前端通过nginx,访问一个文件夹里面的全部数据&#xff0c;nginx 咋配置 2 实现 location /logs {alias /mnt/www/logs/;autoindex on; }

配置了静态ip地址后,通过ssh连接到虚拟机比较慢

配置了静态ip地址后&#xff0c;通过ssh连接到虚拟机比较慢 [rootlocalhost ~]# vim /etc/ssh/sshd_config#快速方式找到UsePAM&#xff0c;输入“/UsePAM”而后回车&#xff0c;直接跳到UsePAM位置&#xff0c;将yes修改成no #键盘输入" i "开始编译 #"Esc&qu…

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞

概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以&#xff0c;我们要重视所有可能影响 Redis 性能的因素&#xff08;如命令操作、系统配置、关键机制、硬件配置等&#xff09;。 影响 Redis 性能的 5 大方面的潜在因素分别是&#xff1a; Redis 内部的阻塞式操作C…

二叉树-堆应用(1)

目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆&#xff08;直…

【经典项目】Java小游戏 —— 会说话的汤姆猫

一、游戏回顾 【预期效果】 【玩法介绍】 1、 和它说话&#xff0c;它将用有趣的声音重复你的话。 2、打它的头&#xff0c;它会装成被打的样子&#xff0c;连续打还会晕倒&#xff1b;抚摸肚子&#xff0c;它会打呼噜&#xff1b;打肚子&#xff0c;它会装肚子疼&#xff1b…

AVR 328pb定时器0基本介绍和使用

AVR 328pb定时器0基本介绍和使用 &#x1f4cc;参考ATmega328PB文档.&#x1f4cd;结合参考同架构lgt8f328p中文文档&#xff1a;http://www.prodesign.com.cn/wp-content/uploads/2023/03/LGT8FX8P_databook_v1.0.4.pdf &#x1f4d7;定时器0基本功能描述 两个独立的输出比较…