演算法導論13 回溯法 最小重量機器設計問題

2021-10-24 18:32:18 字數 815 閱讀 6532

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 ...