/头文件 最小重量机器设计问题.h/
#ifndef KNAP_H
#define KNAP_H
#include
#include
using namespace std;
class Machine //机器类
{
public:
Machine(char *in, char *out); //构造函数Machine(); //析构函数Machine()
void Solve(); //输出结果到文件
protected:
void Search(int i, int s, int l, int *e); //从第i个部件开始递归搜索
void Print(); //输出结果
private:
int n; //部件个数
int m; //供应商个数
int d; //价格上限
int **w; //部件重量
int **c; //部件价格
int min; //最小重量
int *plan; //选购的部件
ofstream fout; //输出结果文件
};
#endif
/函数实现文件 最小重量机器设计问题.cpp/
#include "最小重量机器设计问题.h"
Machine::Machine(char in, char out) : fout(out)
{
ifstream fin(in);
if( !fin )
{
cerr << "文件" << in << "无法打开!" << endl;
exit(1);
}
fin >> n >> m >> d; //初始化部件个数n,供应商数m,价格限制d
w = new int[n+1];
for(int i = 1; i <= n; i++)
{
w[i] = new int[m+1];
for(int j = 1; j <= m; j++)
fin >> w[i][j]; //初始化部件重量
}
c = new int[n+1];
for(int i = 1; i <= n; i++)
{
c[i] = new int[n+1];
for(int j = 1; j <= m; j++)
fin >> c[i][j]; //初始化部件价格
}
fin.close();
min = INT_MAX; //初始化最小重量
plan = new int[n+1];
for(int i = 1; i <= n; i++)
plan[i] = 0; //初始化选购计划
if( !fout )
{
cerr << "文件" << out << "无法打开!" << endl;
exit(1);
}
}
Machine::
{
if(fout)
fout.close();
for(int i = 1; i <= n; i++)
{
if(w[i])
delete[] w[i];
if(c[i])
delete[] c[i];
}
if(w)
delete[] w;
if(c)
delete[] c;
}
void Machine::Solve()
{
int *e;
e = new int[n+1];
for(int i = 1; i <= n; i++)
e[i] = 0;
Search(1, 0, 0, e); //第一个零件开始搜索,初始重量和价格是0
Print(); //输出函数
}
void Machine::Search(int i, int s, int l, int *e)
{
if(i == n+1) //选购完毕
{
if(s < min && l <= d) //找到一个更优解
{
min = s; //更新重量最小值
for(int i = 1; i <= n; i++)
plan[i] = e[i]; //更新选购计划
}
return;
}
if(s > min) //重量超过min,剪枝
return;
for(int j = 1; j <= m; j++)
{
e[i] = j;
s += w[i][j]; //加上第i部件由j供应商提供的重量
l += c[i][j]; //加上第i部件由j供应商提供的价格
Search(i+1, s, l, e); //递归选购下一个部件
s -= w[i][j];
l -= c[i][j];
}
}
void Machine::Print()
{
fout << min << endl;
for(int i = 1; i <= n; i++)
fout << plan[i] << ' ';
}
/主函数文件 test.cpp/
#include "最小重量机器设计问题.h"
int main()
{
char *in = "input.txt"; //输入文件
char *out = "output.txt"; //输出文件
Machine machine(in, out); //文件初始化机器
machine.Solve(); //回溯法求解
return 0;
}
应该就是头文件没有加载进项目,所以找不到