如何利用python回溯算法求不等式的所有整数解呢,搞不懂回溯是什么意思
2条回答 默认 最新
关注举个例子: 求 3x+2y<25的正整数解
def Solution(nums): def backtrack(nums, path, start): # 将满足条件的path添加到res结果中 if len(path)==2: # 不等式条件 和 变量个数 t = tuple(path.copy()) if t[0]*3+t[1]*2<25: res.append(t) if t[1]*3+t[0]*2<25: res.append(t[::-1]) if t[0]*3+t[0]*2<25: res.append((t[0],t[0])) if t[1]*3+t[1]*2<25: res.append((t[1],t[1])) # 当前能够选择的参数列表 for i in range(start, len(nums)): # 做选择 path.append(nums[i]) backtrack(nums, path, i+1) # 撤销选择 path.pop() res = [] backtrack(nums, [], 0) return set(res) print(Solution([*range(1,13)])) #估算大致解的范围,定的太大,计算有点慢解集:
{(3, 4), (4, 3), (3, 1), (3, 7), (5, 4), (4, 6), (5, 1), (2, 2), (1, 6), (2, 5), (1, 3), (1, 9), (2, 8), (6, 2), (7, 1), (4, 2), (4, 5), (3, 3), (3, 6), (5, 3), (2, 4), (1, 2), (2, 1), (2, 7), (1, 5), (6, 1), (1, 8), (3, 2), (4, 1), (3, 5), (5, 2), (4, 4), (1, 1), (1, 4), (2, 3), (2, 9), (1, 7), (2, 6), (1, 10), (6, 3)}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录