如何利用python回溯算法求不等式的所有整数解呢,搞不懂回溯是什么意思
举个例子: 求 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)}
回溯算法可参考
https://blog.csdn.net/weixin_45682758/article/details/106593582