算法设计与分析——5

第五章实验报告

7-2 最小重量机器设计问题 

1. 问题描述

 设某一机器由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. 节点状态值:选择该节点后当前的重量和价格。

 

 

 

posted @ 2021-12-15 00:00  alleyn  阅读(45)  评论(0编辑  收藏  举报