回溯法 求解最小機器重量問題 C 演算法

2021-10-06 18:48:04 字數 2901 閱讀 7347

題目內容:

設某一機器由n個部件組成, 部件編號為1 ~ n,每一種部件都可以從m個不同的**商處購得,**商編號為1 ~ m。

設wij是從**商j處購得的部件i的重量, cij是相應的**。對於給定的機器部件重量和機器部件**,計算總**不超過d的最小重量機器設計。

(注意:輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒有空格。)

輸入格式 :

第1行輸入3個正整數n, m和d。接下來n行輸入wij(每行m個整數),最後n行輸入cij(每行m個整數), 這裡1≤n、m≤100。

輸出格式:

輸出的第1行包括n個整數,表示每個對應的**商編號,第2行為對應的最小重量。

輸入樣例:

3 3 7

1 2 3

3 2 1

2 3 2

1 2 3

5 4 2

2 1 2

輸出樣例:

1 3 1

4演算法思想具體演算法解釋

可以將問題抽象為乙個n層的樹,每一層表示乙個零件,每個節點的孩子節點數為**商數,代表可選擇的情況,按照這個規則這個規則建立樹並進行遍歷,找到最小值即可。例如2個零件,3個**商的樹為:

源**

//

//題目內容:

//設某一機器由n個部件組成, 部件編號為1~n,每一種部件都可以從m個不同的**商處購得,**商編號為1~m。

//設wij是從**商j處購得的部件i的重量, cij是相應的**。對於給定的機器部件重量和機器部件**,計算總**不超過d的最小重量機器設計。

//(注意:輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒有空格。)

////輸入格式 :

//第1行輸入3個正整數n, m和d。接下來n行輸入wij(每行m個整數),最後n行輸入cij(每行m個整數), 這裡1≤n、m≤100。

////輸出格式:

//輸出的第1行包括n個整數,表示每個對應的**商編號,第2行為對應的最小重量。

////輸入樣例:

//3 3 7

//1 2 3

//3 2 1

//2 3 2

//1 2 3

//5 4 2

//2 1 2

////輸出樣例:

//1 3 1

//4#define _crt_secure_no_warnings

#include

#include

using

namespace std;

int n =0;

//零件數量

int m =0;

//**商數量

int d =0;

//最大總價

int bestd =0;

//最小質量

vector

int>> vwij;

//質量

vector

int>> vcij;

//**

vector<

int> way;

//記錄每個零件選擇的**商

int w =0;

//當前重量

int c =0;

//當前**

int num =0;

//當前層數

vector<

int> op;

//當前路徑

void

run();

//建立樹

void

findbestd

(int ni,

int& w,

int& c, vector<

int>

& op)

;//遍歷樹

void

demo()

;//示例

intmain

(void

)void

run(

)//給質量、**賦值,即建立樹

for(

int i =

1; i <= n; i++)}

for(

int i =

1; i <= n; i++)}

bestd = vwij[1]

[1]+ vwij[2]

[1]+ vwij[3]

[1];

findbestd(1

, w, c, op)

;//遍歷樹

//輸出路徑

for(

int i =

1; i <= n; i++

) cout << endl;

cout << bestd << endl;

//輸出最佳值

}//遞迴遍歷樹 num:當前遍歷層數 w:當前重量 c:當前**

void

findbestd

(int ni,

int& w,

int& c, vector<

int>

& op)}}

else}}

}//示例

//3 3 7

//1 2 3

//3 2 1

//2 3 2

//1 2 3

//5 4 2

//2 1 2

void

demo()

,,,}

; vcij =,,

,};}

回溯法求解最小機器重量設計問題

題目 設某一機器由n個部件組成,部件編號為1n,每一種部件都可以從m個不同的 商處購得,商編號為1m。設wij是從 商j處購得的部件i的重量,cij是相應的 對於給定的機器部件重量和機器部件 計算總 不超過d的最小重量機器設計。注意 輸出結果中第一行最後沒有空格。比如下面的輸出樣例中1 3 1後面沒...

回溯法解決最小機器重量問題

1.問題描述 設某一機器由n個部件組成,每一種部件都可以從m個不同的 商處購得。設 w ij是從 商j 處購得的部件i的重量,c ij是相應的 試設計乙個回溯演算法,對於給定的機器部件重量和機器部件 計算總 不超過c的最小重量機器設計。2.解題思路 3.演算法設計 回溯法要求要給出約束條件,很明顯 ...

最小重量機器設計問題 回溯法)

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