首页 > 编程知识 正文

dfs算法原理,深度优先算法

时间:2023-05-06 13:46:24 阅读:137874 作者:1234

根据接入节点的顺序和方式,可以分为宽度优先算法(BFS )和深度优先算法(DFS ),本文介绍深度优先算法。

深度优先算法1、算法概述

深度优先搜索是图形算法的一种,英语中简称为DFS。 简单来说,该过程不会对每个可能的分支路径进行更深的挖掘,每个节点只能访问一次。

深层搜索是爬行动物开发初期应用较多的一种方法,其目的是实现被搜索结构的叶节点,即不包含超链接的HTML文件。

其思想:

a .对顶点v的访问;

b .从v的未被访问的邻接点开始按顺序出发,在深度优先遍历图的图中,被访问到与v路径相通的顶点;

c .此时,图中尚未访问顶点的情况下,从未访问的顶点开始,重新进行深度优先的扫描,直到访问了图中的所有顶点。

2、原理详解

(深度优先搜索通过堆栈实现,整个过程可以想象为倒立的树) )。

1、将根节点推入堆栈。

2、从堆栈中逐个取出要素,检索其下一级的所有要素,并将这些要素推入堆栈中。 将该元素称为下一个元素的前体。

3、找到要找的要素后退出程序。

4、穿越整棵树仍找不到时,退出程序。

本文采用深度优先算法对图进行遍历,并介绍其原理:

首先展示了图:

假设选择的节点a为根节点,将根节点a放入堆栈。 从堆栈中取出节点a,找出a的子节点b、c并放入堆栈中。 (此时在节点a上)

从堆栈中取出节点b,寻找b的子节点d,放入堆栈中。 (此时在节点b上)

取出节点d,寻找子节点f并放入堆栈。

然后取出节点f,重复上述操作直到扫描了所有图表。

需要注意的是:

如果一个节点有多个子节点,则子节点进入堆栈的顺序是随机的。 也就是说,即使是同一个图表,也能得到各种各样的结果。 如果你去节点f,你会发现f没有子节点。 如果是这样,返回f的父节点,寻找还没有走过的节点。 如果父节点中没有尚未行走的子节点,则继续跳转。 跳跃的过程不表现也没关系。3、代码描述

#-- coding : utf-8-- ' ' createdonsunmar 31163360563360062019 @ author : cs dhmg ' ' graph={ ' a ' : ] ' c ' c。 start ) :stack=list(start )将开始节点放入堆栈closed=set中创建集合,创建已经通过的节点closed.add(start ) while(len ) 判断从堆栈中取出节点nodes=graph[vertex] #节点是否通过了fornodeinnodes 3360 ifnodenotinclosed : #如果节点没有通过,则判断为堆栈和集合

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。