算法太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, [])