BFS和DFS的基本思想

最近碰到BFS和DFS的编程题比较多,所以想整理一下相关算法的基本思想,以便以后使用。

1.DFS(深度优先搜索)

深度优先直白讲是一种一条道走到黑,撞了南墙再回头的算法。所以其整个搜索空间可以表示为一个多叉树。其可以用递归和栈来分别实现。基本思想如下:

1.1 递归实现DFS

function DFS(root){

递归出口:搜索到最底部叶节点

递归部分:循环当前可到达的所有子节点:

                       循环内部:处理该子节点,调用DFS(childrenroot),复原该子节点。}

1.2 栈实现DFS

使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。

function DFS(root){

初始:root入栈;

while(栈非空){

出栈一个结点,处理该节点;

把该节点可到达的节点都依次压入栈中;

}

}

2.BFS(广度优先搜索)

广度优先的搜索空间也可以表示为一个多叉树。其实现树结构的逐层遍历。BFS可以用队列来实现。基本思想如下:

2.1 栈实现DFS

使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。

function DFS(root){

初始:root入队列。

while(队列非空){

出队一个结点,处理该节点;

把该节点可到达的节点都依次压入栈中;

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容