欢迎光临散文网 会员登陆 & 注册

【算法图解】个人学习笔记4——DFS深度优先算法

2021-10-20 04:21 作者:达达里A  | 我要投稿

定义

深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。这种算法不会根据图的结构等信息调整执行策略。


代码:

#深度优先算法

#参考 https://www.bilibili.com/video/BV1Ks411575U/?spm_id_from=333.788.recommend_more_video.0

graph={

"A":["B","C"],

"B":["A","C","D"],

"C":["A","B","D","E"],

"D":["B","C","E","F"],

"E":["C","D"],

"F":["D"]

}

def DFS(graph,s,mb): #mb为用户查找目标元素

       #创建栈

    stack=[]

    #加入变量起点根s

    stack.append(s)

    # 邻居节点,判断是否重复遍历

    seen=set()#创建一个集合

    seen.add(s)#加入

    relpace=0#记录所走步长

    while stack:

        # 添加一个节点,比如"A"为vertex

        vertex=stack.pop()

        # 栈后进先出,所以是pop()先出

        # nodes为"A"的临近节点

        nodes=graph[vertex]

        #w为遍历nodes的集合

       

        for w in nodes:

             

            if w not in seen:

                # 如果w不在seen中,w则加入集合和字典

                stack.append(w)

                seen. add(w)

                     

        # 当遍历到F        

        if vertex==mb:

            break  

        print(vertex)    

        relpace +=1

        if relpace>6:

            print("不存在要遍历的玩意")

    print("大O表示法查找时长为{}".format(relpace))

DFS(graph,"A","F")


【算法图解】个人学习笔记4——DFS深度优先算法的评论 (共 条)

分享到微博请遵守国家法律