06-6.3.3 图的深度优先遍历

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

回顾树的先根遍历

void PreOrder(TreeNode *R)
{if (R != NULL){visit(R);  // 访问根结点while (R还有下一个子树T)PreOder(T);  // 先根遍历下一棵子树}
}

图的深度优先遍历-代码实现

bool visited[MAX_VERTEX_NUM];  // 访问标记数组void DFS (Graph G, int v)  // 从顶点v出发,深度优先遍历图G
{visit(v);  // 访问顶点vvisited[v] = TRUE;  // 设已访问标记for (w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w))if (!visited[w])  // w为v的尚未访问的邻接结点{DFS(G, w);}  // if
}

如果是非连通图,则无法遍历所有结点
解决方法类似:完成遍历之后,可以再进行一次扫描,如果发现有结点仍然是false,那就说明与之对应的结点是没有被访问过的
也就是要加上如下代码之后再进行深度优先遍历

void DFSTraverse(Graph G)  // 对图G进行深度优先遍历
{for(v = 0; v < G.vexnum; ++v)visited[v] = FALSE;  // 初始化已访问标记数据for(v = 0; v < G.vexnum; ++v)  // 本代码中是从v=0开始遍历if(!visited[v])DFS(G, v);
}

深度优先遍历序列

同一个图的邻接矩阵表示方式唯一,因此深度深度优先遍历序列唯一
同一个图的邻接表表示方式不唯一,因此深度优先遍历序列不唯一

此外,还有深度优先生成树深度优先生成森林

图的遍历和图的连通性

无向图进行BFS/DFS遍历
调用BFS/DFS函数的次数 = 连通分量数

对于连通图只需要调用一次BFS/DFS


有向图进行BFS/DFS遍历
调用BFS/DFS函数的次数要具体分析

如果起始顶点到其他各顶点都有路径,则只需调用一次BFS/DFS函数


对于强连通图,从任一结点出发都只需调用一次BFS/DFS

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

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

相关文章

UE5.4新功能 - Texture Graph上手简介

TextureGraph是UE5.4还在实验(Experimental)阶段的新功能&#xff0c;该功能旨在材质生成方面达到类似Subtance Designer的效果&#xff0c;从而程序化的生成一些纹理。 本文就来简要学习一下。 1.使用UE5.4或以上版本&#xff0c;激活TextureGraph插件 2.内容视图中右键找到…

万字 | 菊花厂C语言编程10大规范

本文是大厂C代码规范&#xff0c;有点长&#xff0c;有时间可以学习下。 1 代码总体原则 1、清晰第一 清晰性是易于维护、易于重构的程序必需具备的特征。代码首先是给人读的&#xff0c;好的代码应当可以像文章一样发声朗诵出来。 目前软件维护期成本占整个生命周期成本的…

【INTEL(ALTERA)】为什么Nios® II构建流程报告无法在 Windows WSL 上确定程序大小?

目录 说明 解决方法 说明 由于英特尔 Quartus Prime 专业版软件 19.3 版中的 nios2-elf-stackreport 实用程序出现问题&#xff0c;nios2-elf-stackreport 实用程序确实如此 不报告程序大小或堆栈堆栈大小。 解决方法 要解决此问题&#xff0c;编辑 nios2-stackreport.pl …

1)并发事务的问题

1) 并发事务的问题&#xff1f; &#xff08;1&#xff09;读“脏”数据 事务T1修改数据后T2读取了该数据&#xff0c;但是T1撤消了修改&#xff0c; 事务T1进行了回滚&#xff0c;导致事务T2读取的数据与数据库中的数据不一致。&#xff08;2&#xff09;丢失修改 两个事务…

面向对象(Java)

构造方法只能在对象实例化的时候调用 this可以作为方法参数&#xff0c;表示调用方法的当前对象 this可以作为方法返回值&#xff0c;表示返回当前对象 封装 通过方法访问数据&#xff0c;隐藏类的实现细节 static&#xff1a;类对象共享&#xff0c;类加载时产生&#xff0c;…

Qt 实战(7)元对象系统 | 7.2、MOC(Meta-Object Compiler 元对象编译器)

文章目录 一、MOC1、MOC的作用2、MOC的工作原理3、MOC的使用方式4、MOC生成的文件结构 前言&#xff1a; 在Qt框架中&#xff0c;MOC&#xff08;Meta-Object Compiler&#xff09;是一个至关重要的工具&#xff0c;它负责处理Qt特有的元对象系统&#xff08;Meta-Object Syste…

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代&#xff0c;我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说&#xff0c;有时候需要在自己的电脑上安装 Windows 操作系统&#xff0c;以体验更多软件及功能&#xff0c;而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…

自定义控件动画篇(七)layoutAnimation与gridLayoutAnimation的使用

在Android中&#xff0c;LayoutAnimation 和 GridLayoutAnimation 是用来给布局内的子视图添加动画效果的。它们允许你对整个布局的显示过程进行动画处理&#xff0c;而不是单个视图。 LayoutAnimation LayoutAnimation 可以应用于任何的布局管理器&#xff0c;如LinearLayou…

docker的安装与基本使用

一.docker的安装卸载 1.先安装所需软件包 yum install -y yum-utils2.设置stable镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.安装DOCKER CE yum -y install docker-ce docker-ce-cli containerd.io 4.验…

深度Q网络(DQN)算法技术博客

深度Q网络&#xff08;DQN&#xff09;是一种将深度学习与强化学习相结合的算法&#xff0c;用于解决高维状态空间的强化学习问题。本文将详细介绍DQN算法的基本原理&#xff0c;关键公式以及具体的代码实现。 一、DQN算法的基本原理 DQN算法是Q学习的一种扩展&#xff0c;利…

Prompt的万能公式和优化技巧

文章目录 前言一、万能公式二、优化技巧1.设定角色2.设定目标和动机3.引导主观回答4.预设条件5.做强调6.思维链&#xff08;COT&#xff09;7.巧用定界符 前言 随着LLM的发展&#xff0c;能给我们带来很多方便&#xff0c;但是又引出了一个新的问题就是我们该如何使用他们&…

通过9大步骤,帮助企业在数字化转型中搭建数据分析的报表体系!

引言&#xff1a;在数字化转型中&#xff0c;企业搭建数据分析的报表体系是一个系统性的过程&#xff0c;需要综合考虑业务需求、数据来源、技术平台等多个方面。此外从报表生命周期的角度来说&#xff0c;从产生、使用以及最后消亡退出体系&#xff0c;都需要通盘考虑&#xf…

Linux上快速定位Java代码问题行

生产环境中&#xff0c;经常会遇到CPU持续飙高或内存、IO飙高&#xff0c;如何快速定位问题点是很多新手头疼的问题&#xff0c;只能通过经验和代码推理&#xff0c;其实这里针对Java程序可以通过top和jstack命令&#xff0c;快速定位到问题代码。 Top命令的输出 具体定位之前…

k8s-第八节-Helm

Helm & 命名空间 介绍 Helm类似 npm,pip,docker hub, 可以理解为是一个软件库,可以方便快速的为我们的集群安装一些第三方软件。使用 Helm 我们可以非常方便的就搭建出来 MongoDB / MySQL 副本集群,YAML 文件别人都给我们写好了,直接使用。官网 https://helm.sh/zh/ …

虚拟机与主机的联通

本地光纤分配地址给路由器--》连结路由器是连结局域网--》由路由器分配IP地址 因此在网站上搜索的IP与本机的IP是不一样的 1.windows查看主机IP地址 在终端输入 2.linux虚拟机查看ip 3.主机是否联通虚拟机ping加ip

Hadoop页面报错Permission denied: user=dr.who, access....

1、临时解决 hdfs dfs -chmod -R 777 /这种方法&#xff0c;存在一个不足&#xff0c;就是后面重新创建的文件夹&#xff0c;页面进行删除的时候&#xff0c;依然报这个错。 但是&#xff0c;对于应付紧急客户需求&#xff0c;可以临时用一下。 2、永久解决 查看页面的Owner…

深度学习中,模型的构建和训练过程中会用到多种函数

在深度学习中&#xff0c;模型的构建和训练过程中会用到多种函数&#xff0c;这些函数在数据处理、模型定义、损失计算、激活以及优化等方面发挥着重要作用。以下是一些常见的深度学习模型中用到的函数&#xff1a; 1. 激活函数 Sigmoid函数&#xff1a;Sigmoid函数是一种非线…

为什么使用StartAI文生图进行AI绘画?

什么是文生图&#xff1f; 文生图是AIGC中一种先进的图像生成技术&#xff0c;它能够根据用户输入的文字描述&#xff0c;智能地生成相应的图像。无论是抽象的概念&#xff0c;还是具体的物体&#xff0c;文生图都能够以惊人的准确性和艺术性呈现出来。 StartAI文生图如何进行…

7 动态规划

下面的例子不错&#xff1a; 对于动态规划&#xff0c;能学到不少东西&#xff1b; 你要清楚每一步都在做什么&#xff0c;划分细致就能够拆解清楚&#xff01; xk. - 力扣&#xff08;LeetCode&#xff09; labuladong的算法笔记-动态规划-CSDN博客 动态规划是一种强大的算法…

【计算机视觉系列实战教程 (实战03)】:提取两点之间的边缘点

1、目的 图像中任意两点&#xff08;起点到终点&#xff09;之间&#xff0c;提取由深色到浅色&#xff08;或由浅色到深色&#xff09;的第一个边缘点。这样有利于精确地提取指定区域内的图像边缘。 经实践证明&#xff1a;本算法能够有效地定位两点之间的边缘信息&#xff0c…