【算法之Python篇】回溯算法

本文介绍了如何使用Python实现经典的N皇后问题和全排列问题。N皇后问题中,通过检查每一行的皇后位置是否冲突,递归地放置皇后。全排列问题则利用回溯法生成所有可能的排列组合。这两个算法都涉及到回溯和递归策略,对于理解计算机科学中的搜索和优化问题具有重要意义。
摘要由CSDN通过智能技术生成

N皇后问题

def check_box(row_index):#检查0行到当前行是否符合要求的
    for i in range(row_index):
        if cols[i]==cols[row_index]:#检查i行和row_index行是否在同一列
            return False
        if row_index-i==abs(cols[i]-cols[row_index]):#检查i行和row_index行是否在同一斜线
            return False
    else:#循环奖励语句
        return True
        
def set_queen(row_index):
    if row_index==queens_num: #回溯中断
        res.append(cols[:]) #加入一个解决方案
        return
    for i in range(queens_num):
        cols[row_index] = i #当前行关键语句
        if check_box(row_index):#检查满足要求的皇后
            set_queen(row_index+1) #排好这一行就进行下一行
            
queens_num=4
res=[]#记录全部解决方案
cols=[0 for _ in range(queens_num)]  #”_“获取最后一次变量
set_queen(0)
print(res)


>>>[[1, 3, 0, 2], [2, 0, 3, 1]]

全排列

def permute(nums, m, solution=[]):
    if m == 0:  #回溯终止条件
        res.append(solution)
        return
    
    for i in range(len(nums)):
        new_solution = solution + [nums[i]]
        new_list = nums[:i] + nums[i+1:]  #把除了nums[i]()也就是已经排列的组合去掉)的其它数合并
        permute(new_list, m-1, new_solution)
    return


res = []  #存储最终结果
permute([1,2,3,4], 3)
print(res)

>>>[[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IsQiya

很庆幸我的文章对您有帮助

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

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

打赏作者

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

抵扣说明:

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

余额充值