棧應用之 背包問題
背包問題描述:一個背包里可以放入重量為weight的物品,現有n件物品的集合s,其中物品的重量為別為w0,w1,...,wn-1。問題是能否從中選出若干件物品,其重量之和正好等於weight,如果存在就說明這一背包問題有解,否則就無解。
- 使用遞歸方式求解
1 def knap_rec(weight,wlist,n) : 2 if weight == 0 : 3 return True 4 if weight < 0 or (weight >0 and n < 1) : 5 return False 6 if knap_rec(weight - wlist[n-1],wlist,n-1) : 7 print("Item" + str(n) + ":" , wlist[n-1]) 8 return True 9 if knap_rec(weight,wlist,n-1) : 10 return True 11 else : 12 return False
- 使用棧定義非遞歸方式求解、