回溯算法:全排列问题(python)
图解
代码实现
```python
def dfs(a,used,res,path,depth,lengh):
#当深度=数组长度时候 将copy的数据放入res结果集
if depth==lengh:
res.append(path.copy())
return
for i in range(0,len(a)):
if used[i]!=1:
path.append(a[i])
used[i]=1
#进行递归操作
dfs(a,used,res,path,depth+1,lengh)
#回溯撤回选择操作
used[i]=0
path.pop()
def test():
a=[1,2,3]
res = []
path = []
#标记元素是否被使用的数组 使用过标记为1,未被使用标记为0
used = [0,0,0]
dfs(a, used, res, path, 0, len(a))
return res
a=list(test())
print(a)
思想
回溯算法就是使用递归加撤销选择方法遍历出所有的可能性,时间复杂度随着输入的n成次方关系,时间复杂度非常大,可以使用剪枝方法进行优化