回溯算法:全排列问题(python)

本文探讨了如何使用回溯算法解决全排列问题,详细解释了算法的图解、代码实现和思想,并指出回溯算法的时间复杂度,提示可以通过剪枝优化。
摘要由CSDN通过智能技术生成

回溯算法:全排列问题(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成次方关系,时间复杂度非常大,可以使用剪枝方法进行优化


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小徐404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值