def init():
global bestw,cw,w,r,x
bestw =0
cw = 0
x=[0]*100
w= list(eval,(input("请输入各货箱的重量:")))
r = sum(w)
def BackTrack(t):
global bestx,bestw,cw,r,x
if t>(n-1):
bestx = x
bestw = cw
else:
r -=w[t]
if (cw+w[t])<=W:
cw += w[t]
x[t] = 1
BackTrack(t+1)
cw -= w[t]
if (cw+r) > bestw:
x[t] = 0
BackTrack(t+1)
r += w[t]
return
def print_func():
global bestw,bestx,w,x,n
print("最佳载重为:{0},最佳解向量:{1}".format(bestw,bestx[0:n]))
print("即:")
for i in range(n):
if x[i] == 1:
print("第{0}个货箱(重量为:{1})装入轮船".format(i+1,w[i]))
else:
print("第{0}个货箱(重量为:{1})不装入轮船".format(i + 1, w[i]))
if __name__ == '__main__':
n = int(input("请输入货箱的个数:"))
W = int(input("请输入轮船的载重量:"))
init()
BackTrack(0)
print_func()
结果:
请输入货箱的个数:3
请输入轮船的载重量:18
请输入各货箱的重量:11,12,3,4
最佳载重为:12,最佳解向量:[0, 1, 0]
即:
第1个货箱(重量为:11)不装入轮船
第2个货箱(重量为:12)装入轮船
第3个货箱(重量为:3)不装入轮船