子集和问题解法(回溯算法的python代码)
def SubSeriesSum(start, series, target):
global s #定义全局变量在递归中重复使用
if start >= len(series):
if s == target: #满足要求后输出子集
print("subseries:", end=" ")
for i in x:
if i != 0:
print(i, end=" ")
print("\n")
return
else: #深度优先策略
s += series[start]
x[start] = series[start] #无论选用与否先放如X[]中
SubSeriesSum(start + 1, series, target)
s -= series[start]
x[start] = 0 #剔除错误选项
SubSeriesSum(start + 1, series, target)
if __name__ == '__main__':
s = 0 #求子集的总和
series = [2, 5, 6, 8] #所求的目标序列
x = [0 for i in range(len(series))] #定义子集列表
target = 10 #定义子集所求的目标
SubSeriesSum(0, series, target)