图的深度优先搜索(DFS)简介与实现(递归与非递归方法)

本文介绍了图的深度优先搜索(DFS)的基本概念,并提供了递归与非递归两种实现方法。非递归实现利用栈和访问数组,遍历所有连通顶点;递归实现则基于回溯思想,逐个探索邻接顶点。代码示例和详细解释有助于理解和应用DFS。
摘要由CSDN通过智能技术生成

        上一篇刚刚学习了C++图的实现,今天对深度优先搜索(DFS)进行了一定学习,并作出一定实现。在本文中图的实现,以及相应的函数调用(如获得第一个邻接顶点、获得下一个邻接顶点等)均是基于上文中的实现,故如果想参考测试代码,还需导入上文中相应的类定义。关于C++图的实现可参考此处,这里实现了对图的邻接表以及邻接矩阵两种实现,而本文的深度优先搜索对于上面两种实现均是可行的。

        当然,对于图的深度优先搜索的相关定义,本文也不再过多赘述,维基的解释应该就足够,下面将探讨其实现。

        1、深度优先搜索的非递归实现:

         要实现非递归的深度优先搜索,本文用到栈s来存储,用一个数组visited(初始所有元素为false,代表未访问)来做访问的标记。基本思想是:从给定的搜索的第一个顶点loc开始,将其压入堆栈,并标记visited[loc]为true表示已访问;之后循环进行如下操作,只要栈不为空,取出最上方元素,将其记录(本文直接打印,若有需要,可将其存入数组or Vector),然后去打所有的邻接顶点,只要还未访问(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值