-最小重量机器设计问题.docxVIP

  • 11
  • 0
  • 约1.77千字
  • 约 3页
  • 2021-09-07 发布于山东
  • 举报
— PAGE \* Arabic 1 — -最小重量机器设计问题 -最小重量机器设计问题 课题负责人名(学号):- 同组成员名单(角色):-指导教师:-评阅成绩: 评阅意见: 提交报告时间:xx年6 月17 日最小重量机器设计问题计算机科学与技术专业学生指导老师-[题目描述] 设某一机器由 n 个部件组成,每一种部件都可以从 m 个不同的供应商处购得。高wij 是从供应商 j 处购得的部件 i 的重量,cij 是相应的价格。试设计一个算法,给出总价格不超过 c 的最小重量机器设计。编程任务: 对于给定的机器部件重量和机器部件价格,编程计算总价格不超过 d 的最小重量机器设计。数据输入:由文件 input、txt 给出输入数据。第一行有3 个正整数 n,m 和 d。接正业的2n 行,每行 n 个数。前 n 行是 c,后 n 行是 w。结果输出:将计算出的最小重量,以及每个部件的供应商输出到文件output、txt。输入文件示例输出文件示例input、txt output、txt3344123131321222123321222[算法分析]采用回溯算法和分支定界法分别实现,对于回溯法,采用深度优先搜索对子集树进行剪枝,剪枝条件是当前的总费用不超过总费用;对于分支定界法,采用按照层次遍历对子集树进行剪枝,并将每层的结点按照重量由小到大进行排序,将相应下标保存在二维数组s中,以便 构造最优解。两种算法是时间复杂度都是O(m^n),空间复杂度均为O(nm),但由于分支定界法在已经排好序的序列中查找,因此查找到的第一个解即为最优解,理论上来说,时间效率会比回溯法高。 [程序实现]回溯法代码#include #include #include #include #include using namespace std;#define INF999999999#define MAXSIZE100+1int cur_solution[MAXSIZE];int solution[MAXSIZE];int w[MAXSIZE][MAXSIZE]; //weightint c[MAXSIZE][MAXSIZE]; //costint minWeight; int cur_minWeight;void Backtrack(int t,int n,int m,int d){if(tn){if(cur_minWeight ::iterator it;node *pnode;/* 读取文件 */FILE *pf;if((pf=fopen(input、 txt,r))!=0){fscanf(pf,%d%d%d,w=(int *)malloc(n*m*sizeof(int));//重量p=(int *)malloc(n*m*sizeof(int));//价格 for(i=0;iweight=w[s[0][i]];pnode- price=p[s[0][i]];if(pnode-price+minprice[2]level!=n){printf(can not find answer!!);getchar(); exit(0);}pf=fopen(output、 txt,w);if(pf){fprintf(pf,%d\n,pnode-weight);int count=n,ans[n];while(pnode){ans[--count]=pnode- th;pnode=pnode-prev;}for(i=0;in;++i)fprintf(pf,%d ,ans[i]);fputc(\n,pf);fclose(pf);}if(minprice)free(min price);if(w)free(w);if(p)free(p);return 0;}[运行结果]回溯法运行结果如下,分支定界法结果与下列一致,读者可以自行运行比对

文档评论(0)

1亿VIP精品文档

相关文档