揹包問題(回溯法)

2021-09-28 10:40:16 字數 889 閱讀 4342

使用回溯法解決揹包問題

揹包問題,較好的解決方法為動態規劃,但是在不考慮其時間和計算複雜度的情況下,可以使用回溯法解決(也挺方便)

思想:遍歷所有的可能結果,不斷嘗試新的物品,如果總價值大於上一次的總價值,即可更新bestvalue變數(在不超過總重量的情況下)

程式結果:

可以輸入在當前不超重的情況下的最大價值!

上**:

#include#include#includeusing namespace std;

//這裡解決《揹包問題》

extern int lastvalue = 0;

extern int bestvalue = 0;

int putintobag(int *weight, int *value, int bag, int values, int n, int number, int all)

else

} return 1;

} for (int i = n; i < number; i++)

} }}int main() ;//測試重量

int value[10] = ;//測試價值

int bag = 0;

int values = 0;

putintobag(weight, value, bag, values, 0, 10, 34);//0為初始物品,10為物品總數,34為總重

cout <

system("pause");

return 0;

}

測試結果:

這裡有幾組測試資料:(引用一下)

揹包問題 回溯法

0 1揹包 給定n種物品和一揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。問應如何選擇裝入揹包的物品,使得在總重量不超過揹包的容量c的前提下裝入揹包中物品的總價值最大。includeusing namespace std class bag bag bag bag bag void bag...

回溯法 0 1揹包問題

0 1揹包問題 給定n種物品和一揹包.物品i的重量是wi,其價值為ui,揹包的容量為c.問如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?分析 0 1揹包是子集合選取問題,一般情況下0 1揹包是個np問題.第一步 確定解空間 裝入哪幾種物品 第二步 確定易於搜尋的解空間結構 可以用陣列p,w...

0 1揹包問題 回溯法

0 1揹包問題 回溯法 一 專案描述 每種物品只有2 種選擇,分別為 裝入揹包或不裝入揹包,物品數和揹包容量已給定,計算裝入揹包物品的最大價值和最優裝入方案,用回溯法搜尋子集樹的演算法進行求解。二 演算法設計 a.物品有n種,揹包容量為c,分別用p i 和w i 儲存第i種物品的價值和重量,用x i...