13回溯法—最小重量機器設計問題
問題描述:
乙個機器有n個零部件組成,每個零部件可以在 m 個不同**商處獲得,不同**商 i 的不同零件 i 有兩個引數,重量 wij,** cij,設計演算法給出在**不超過 c 時,最小重量的機器購買設計。
問題分析:
此問題屬於類01揹包問題,即在某個變數的限制條件下,另乙個變數的最優值問題。
首先考慮問題輸出,應該為每個零件的供貨商編號,如果設為x[i],則此演算法最終輸出為x[i]的遍歷,其中i為第i件零件。
現在考慮回溯法的解空間樹,因為每個商品可以從m個供貨商獲得,則問題的解空間樹是一棵m叉樹,該樹屬於子集樹而非排列樹。
然後考慮剪枝條件,此問題中的限制條件為**上限c,最小重量設bestw,則當 當前**演算法設計:
#define n 7
#define c 5
int bestw,cp,cw;
int x[n +1]
;int p[n +1]
[n +1]
;int w[n +1]
[n +1]
;void
traceback
(int i)
for(
int j =
1; j <= n; i++
) cw -
= w[i]
[j];
cp -
= p[i]
[j];
}}
演算法入門(4) 回溯法
1 概念 回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術...
演算法實驗4《回溯法》
1.編寫乙個簡單的程式,解決8皇后問題。include using namespace std bool backtrack int list 8 int t return false intmain 2.批處理作業排程問題 問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任...
最小重量機器設計問題 回溯法)
include include using namespace std define maxn 1000 int n 部件個數 int m 供貨商個數 int max c 最大 int w maxn maxn int c maxn maxn 費用 int cc 當前 int cw 當前重量 int ...