打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python|DFS(深度优先搜索)介绍
问题描述
在众多算法中,时常会用到一种适用于大多数情况的方法,这就是遍历。遍历中的DFS(深度优先搜索)就是今天要介绍的。DFS有递归性结构中最重要的一些属性,一旦在某个节点启动了DFS,就能确保自己能在相关操作继续下去之前遍历完其他所有能达到的节点。
解决方案
任何递归函数都可以用迭代操作来写,一种做法是用栈来模拟调用栈。这种基于迭代操作的DFS是非常实用的,它既可以避免调用栈被塞满带来的问题,也能因此改善算法的某些属性,使其显得更为清晰一些。为了模拟递归遍历,只需要使用一个栈结构。
代码示例(迭代DFS) :
def iter_dfs(G,s):
S,Q = set(),[]   #访问集合和队列
Q.append(s)      #我们计划访问s
while Q:
u =Q.pop()  #使程序进展
if u inS:continue  #是否访问过?跳过
S.add(u)
Q.extend(G(u))
yieldu             #u就是我们要的
为了让这段遍历更实用,添加了一个yield语句,它能按照DFS的顺序来遍历目标结构中的节点。DFS按照“先序遍历的方式”对顶点进行访问,其核心是栈的使用,而且可以用递归实现。
END实习主编   |   王楠岚
责       编   |   刘仕豪
where2go 团队
微信号:算法与编程之美
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
算法入门之搜索
【算法入门】深度优先搜索(DFS)
NOIP2003提高组题解+反思
算法之广度优先搜索
所有可能的路径!
二叉树的遍历算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服