当前位置: 首页 > news >正文

图的BFS和DFS

一,图的遍历逻辑

1.之前我们学了图的存储,可以邻接表存和邻接矩阵存。现在我们要学习图的遍历操作和树类似可以分为深度遍历和广度遍历,而深度遍历也是用递归实现,广度遍历是用队列实现

2.深度遍历(DFS)

a.确定起点

b.找到一条边按顺时针方向(准确来说存储结构方向)来对这个节点进行处理

如左图当我们选择v1为起点找到和v2的这条边,此时激活了v2那么就需要处理v2的三条边,但v1我们已经走过了。由于图没有树那样严格按照1:n的关系因此会有重复访问的节点。因此我们可以引入一个已访问节点的表

3.广度遍历(层次遍历) (BFS)

广度遍历首先也是需要一个队列,当我们访问完一个节点就把激活的新节点入队,然后每出队一个节点就访问它并把新激活的节点入队。但是和树不一样,图也是有可能重复访问的,比如从v1开始访问到v3,当我们访问完v3会激活v1、v6、v7,但是v1已经被访问过了,因此需要引入一个存储已访问节点的表

二,代码实现

1.深度遍历

static int MGraphVisited[MaxNodeNum]={0};
void DFSMGraph(MGraph *graph, int v) {//访问节点visitMGraphNode(&graph->vex[v]);//将节点标记为已访问MGraphVisited[v]=1;//激活连通的节点,排除已访问的for (int i=0;i<MaxNodeNum;i++) {if (isEdge(graph->edges[v][i])&&MGraphVisited[i]==0) {//满足条件递归DFSMGraph(graph,i);}}
}

http://www.dtcms.com/a/294853.html

相关文章:

  • 优化 Elasticsearch JVM 参数配置指南
  • 网安-SQL注入-sqli-labs
  • 前端Web性能核心指标全解析与优化实战指南
  • Mermaid流程图
  • netstat -tunlp | grep的作用
  • day 33打卡
  • 位运算在算法竞赛中的应用(基于C++语言)_位运算优化
  • SAP亚太区借力Business AI加速云转型,第二季度客户扩展势头强劲
  • 【Lucene】leafreadercontext逻辑段与segment物理磁盘段的关系
  • 牛油果褐变的成因与食用安全
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 本地运行C++版StableDiffusion!开源应用StableVerce发布
  • GTSuite许可问题解决方法
  • Flask框架全面详解
  • Python 程序设计讲义(9):Python 的基本数据类型——复数
  • 如何减少冷库能耗,1种降低冷库能耗的方法
  • 元宇宙产业生态全景:从基础设施到未来趋势的深度解析
  • 什么是RWA?它与传统资产和数字资产的区别
  • 【LeetCode刷题指南】--随机链表的复制
  • 腾讯云直播产品优势
  • 自研支架系统:打造Franka双臂协作机器人一体化新方案
  • 详述消息队列kafka
  • 嵌入式开发学习———Linux环境下数据结构学习(二)
  • MYSQL 笔记3
  • vscode怎么安装MINGW
  • Https以及CA证书
  • VUE接口任务轮询查询任务封装hooks
  • 免费的远程电脑控制软件
  • 银河麒麟v10 更换linux内核(降内核版本5.15->5.4)
  • kanzi3.6.10 窗口插件-网页生成界面