python算法自学DAY 2 DFS

本文介绍了深度优先搜索(DFS)算法,包括其基本思想、适用场景、算法流程以及Python实现。DFS常用于遍历图或树,适用于查找是否存在某个结果,具有时间复杂度O(n)。
摘要由CSDN通过智能技术生成

一.DFS 深度优先搜索算法(Depth First Search,简称DFS)

1.简介:

一种用于遍历搜索图或者树的算法,从一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点, 再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。

2.基本思想:(结合了我自己的理解)

不撞南墙不回头的走法,最终遍历完所有顶点

3.适用情景:

找到一个结果是否存在(因为DFS的遍历较为彻底)

4.算法流程

STEP1:表示图

以某种数据结构来表示图。通常可以使用邻接表或邻接矩阵。在Python中,可以使用字典来表示邻接表,或者二维列表来表示邻接矩阵。

STEP2:初始化

初始化一个栈(可以使用Python中的列表模拟栈),以及一个集合或列表来记录已经访问过的节点

STEP3:DFS函数

(1)将起始节点标为已访问,并将其入栈

(2)进入循环直到栈为空

(3)弹出栈顶结点

  (4)  遍历该结点的所有相邻结点

(5)如果相邻结点没有被访问过,将其标记为已访问并入栈

STEP4:主程序

编写主程序来调用DFS函数,并传递图的表示、起始节点等参数。

以下为python代码的实现:

(这里的代码参考了莫失莫忘--CSDN博客大家也可以去原博主那里看一下,写的很详细!)

grap = {
    "A":["B","C","D"],
    "B":["E","F","G"],
    "C":[],
    "D":["I","K"]
}
#存图
 
def DFS(grap,star):                #DFS算法
    stack = []                     #定义一个栈
    seen = set()                   #建立一个集合,集合就是用来判断该元素是不是已经出现过
    stack.append(star)             #将任一个节点放入
    seen.add(star)                 #同上
    while (len(stack)>0) :         #当队列里还有东西时
        ver =  stack.pop()         #取出栈顶元素       !!!!这里也就是与BFS的不同
        notes = grap[ver]          #查看grep里面的key,对应的邻接点
        for i in notes:            #遍历邻接点
            if i not in seen:      #如果该邻接点还没出现过
                stack.append(i)    #存入stack
                seen.add(i)        #存入集合
        print(ver)                 #打印栈顶元素
 
 
print(DFS(grap,"K"))


 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值