Python 树的DFS

算法太NM难了

#######################################################################################
# Author : CHR_崔贺然
# Time : 2020
# TODO : Python算法DFS思路: 1.终止条件 2.循环 3.筛选
# * :  当问题可以抽象成不放回的格子问题就是n!问题可以用DFS解题
# !
# ?
#######################################################################################


#######################################################################################
# Param Data @ p:传入的列表容器.  dp:列表中每个元素的状态.  index:树的层数用来判断终止条件.
#              res:最后接受返回值的容器.
# Return @ res
# TODO @ 树的深度优先搜索
# *
# !
# ?
#######################################################################################
def DFS(p, dp, index, res):

    # 递归终止条件
    if index == len(p) + 1:  # 如果扫到了最后一层+1就停止
        return

    # 开始扫p  i:{0123}
    for i in range(len(p)):
        # 筛选条件,最开始的状态都为false, 如果扫到了则为true
        if dp[i] == False:
            res.append(p[i])
            dp[i] = True
            DFS(p, dp, index+1, res)
            res.pop()
            dp[i] = False

    if len(res) == len(p):
        print(res)


DFS(["A", "B", "C"], [False, False, False], 0, [])
发布了140 篇原创文章 · 获赞 53 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44291044/article/details/104634469
今日推荐