算法设计与分析——5
第五章实验报告
7-2 最小重量机器设计问题
设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。 试设计一个算法,给出总价格不超过d的最小重量机器设计。
输入格式:第一行有3 个正整数n ,m和d, 0<n<30, 0<m<30, 接下来的2n 行,每行n个数。前n行是c,后n行是w。
输出格式:输出计算出的最小重量,以及每个部件的供应商
输入样例:3 3 4 // 1 2 3 // 3 2 1 // 2 2 2 // 1 2 3 // 3 2 1 // 2 2 2
输出样例:4 // 1 3 1
2. 算法描述
主要思路:
int n, m, d; // n个部件,m个不同的供应商处,总价限制
int c[100][100] = {0};
int w[100][100] = {0};
int x[100] = {0};
int min_x[100] = {0};
int min_w = 1000000;
int cur_c = 0;
int cur_w = 0;
void Backtrack(int t) {
if (t > n) {
if (cur_w < min_w) {
min_w = cur_w;
for (int i = 1; i <= n; i++) {
min_x[i] = x[i];
}
}
}
else {
for (int i = 1; i <= m; i++) {
x[t] = i;
if (cur_c + c[t][i] <= d && cur_w + w[t][i] < min_w) {
cur_c += c[t][i];
cur_w += w[t][i];
Backtrack(t+1);
cur_c -= c[t][i];
cur_w -= w[t][i];
}
}
}
}
3. 解空间
4. 解空间树
5. 节点状态值:选择该节点后当前的重量和价格。