首页 > 编程语言 >【408DS算法题】038进阶-图深度优先遍历DFS

【408DS算法题】038进阶-图深度优先遍历DFS

时间:2024-09-08 23:50:11浏览次数:6  
标签:遍历 进阶 408DS int DFS 038 vector visited cur

Index

题目

设计函数实现对图的深度优先遍历。

分析实现

类似于图的BFS的分析思路,图的DFS和二叉树的DFS思路相同,但需要额外考虑结点是否已经被访问过。

此处同样用布尔数组visited来记录每个结点的访问情况,对于邻接矩阵存储方式的图的DFS,依照先序遍历思想实现的对应函数如下:

// 图的结构体的定义
struct Graph{
    int vexnum;
    vector<vector<int>> edge;
};

// DFS辅助函数: cur-当前节点 visited-访问标记数组
void DFSUtil(Graph& G, int cur, vector<bool>& visited){
    visit(G, cur);
    visited[cur] = true;
    for(int i = 0; i < G.vexnum; i++){
        if(G.edge[cur][i] == 1 && !visited[i])
            DFSUtil(G, i, visited);
    }
}

// DFS遍历: v-起始节点
void DFS(Graph& G, int v){
    vector<bool> visited(G.vexnum, false);
    DFSUtil(G, v, visited);
}

总结

以上就是通过辅助递归函数完成的图的DFS的实现。

此处因为涉及到递归,不能直接像BFS那样新建visited数组,否则每次递归都会独立创建一个visited数组。为此,设计了辅助函数来实现目标效果。

标签:遍历,进阶,408DS,int,DFS,038,vector,visited,cur
From: https://blog.csdn.net/weixin_60702024/article/details/142006798

相关文章

  • [MySQL表的增删改查-进阶]
    ......
  • Go进阶概览 -【2.2 结构体与方法集的实现】
    2.2结构体与方法集的实现结构体是我们在实际运用中使用比较多的一个概念,Go语言封装的比较简单,我们在使用的时候不需要关注太多的东西。但是如果对于性能有要求、需要开发框架时,我们还是需要对结构体进行一个深入的了解。本节我们将针对结构体的内存布局、接口实现及面向......
  • Go进阶概览 -【2.4 切片的结构与内存管理】
    2.4切片的结构与内存管理切片是我们日常使用比较多的一个结构,深入的了解它的结构对于我们提高程序性能也有比较大的帮助。本节我们将针对切片底层结构、扩容机制、底层数组进行讲解。本节代码存放目录为lesson4切片底层结构我们在使用的时候发现切片与数组很相似,这是......
  • Linux目录结构进阶和过滤命令(三)
    1.日志查询四剑客注意:查看日志的时候不要用cat或者vim命令,在工作中日志的内容很多,用cat会刷屏,用vim又特别的占用内存,所以我们引出了四条有关查看日志的相关命令1.1四剑客之headhead#显示文件的头几行,默认显示十行head-nnum#显示头num行实例一:显示/etc/passwd的......
  • 【Python使用】嘿马python高级进阶全体系教程第9篇:HTTP 协议,1. HTTP 协议的介绍【附
    本教程的知识点为:操作系统1.常见的操作系统4.小结ls命令选项2.小结mkdir和rm命令选项1.mkdir命令选项压缩和解压缩命令1.压缩格式的介绍2.tar命令及选项的使用3.zip和unzip命令及选项的使用4.小结编辑器vim1.vim的介绍2.vim的工作模式3.vim的末行模......
  • 网络属性及相关配置工具\shel脚本编程-进阶 \进程-系统性能和计划任务
    一、通过网络配置命令让主机上网1.查看网络接口信息:  -`ipa`或者`ifconfig`显示系统中所有网络接口的详细信息,包括IP地址、子网掩码、MAC地址等。2.配置IP地址、子网掩码、网关和DNS:  -IP地址:使用`ifconfig`或`ipaa`命令来设置IP地址。例如,`ifconfig......
  • C++ 模板进阶知识——完美转发
    目录C++模板进阶知识——完美转发1.完美转发的步骤演绎完美转发的关键点2.std::forward2.1工作原理2.2重要性3.普通参数的完美转发4.在构造函数模板中使用完美转发范例5.在可变参数模板中使用完美转发范例5.1常规的在可变参模板中使用完美转发5.2将目标函数......
  • C语言进阶版第8课—指针(2)
    文章目录1.数组名的理解2.指针访问数组3.一维数组传参本质4.冒泡排序5.二级指针6.指针数组7.指针数组模拟二维数组1.数组名的理解sizeof(数组名)—这里的数组名代表整个数组,计算的也是整个数组的大小&数组名—这里的数组名代表是整个数组,取出的是整个数组......
  • 深度学习实战4--GAN进阶与优化
            GAN  的问题主要有两点:Loss 等于0的梯度消失问题和梯度不稳定以及多样性受损。前者是因为选择的分布函数使用JS距离,这个距离不能衡量两个不相交的分布的距离;后者是因为Loss  函数要求KL距离最小,JS 距离最大,所以梯度不稳定,而且 Loss 函数对正确率要......
  • SGT 进阶(?
    动态开点当正常堆式建树开不下时(\(n\)或\(V\)过大),通常使用动态开点。例题P2781传教算是很板了吧?每次修改的时候,若当前访问节点未建立则新建节点并回溯至上一个节点记录左右儿子。实测写&引用或struct是很方便的。要十分注意的是在work函数(单点修改&标记下放)里面......