最小重量机器设计问题

来源:互联网 发布:双代号施工网络计划 编辑:程序博客网 时间:2024/06/08 07:23
#include <iostream>#include <fstream>using namespace std;const int INF = 100000;const int MAX = 50;int c[MAX][MAX];int w[MAX][MAX];int bestx[MAX];int x[MAX];int n, m, d; //部件个数,供应商数,最大总价格int cp = 0;int bestw = INF;int cw = 0;void backtrack(int i){    if(i>n)    {        if(cw < bestw)        {            bestw = cw;            for(int r=1; r<=m; r++)                bestx[r] = x[r];        }    }    else        for(int j=1; j<=m; j++) //供应商        {            x[i] = j;            cw += w[i][j];            cp += c[i][j];            if(cp <= d && cw <bestw)                backtrack(i+1);            cw -= w[i][j];            cp -= c[i][j];            x[i] = 0;        }}int main(){    ifstream fin("最小重量机器设计.txt");    cout << "输入部件个数:";    fin >> n; cout << n;    cout << "\n输入供应商个数:";    fin  >> m; cout << m;    cout << "\n输入最大总价格:";    fin >> d; cout << d;    cout << "\n输入价格矩阵:\n";    int i, j;    for(i=1; i<=n; i++)    {        for(j=1; j<=m; j++)        {            fin >> c[i][j];              cout << c[i][j] << " ";        }        cout << endl;    }    cout << "\n输入重量矩阵:\n";    for(i=1; i<=n; i++)    {        for(j=1; j<=m; j++)        {            fin >> w[i][j];              cout << w[i][j] << " ";        }        cout << endl;    }    backtrack(1);    cout << "\n最小重量为:" << bestw;    cout << "\n每个部件的供应商为:\n" ;    for(i=1; i<=n; i++)            cout << bestx[i] << " ";    cout << endl;    cout << endl;    fin.close();    return 0;}

这里写图片描述

0 0