最小重量机器设计问题(回溯)
来源:互联网 发布:电脑桌面日历提醒软件 编辑:程序博客网 时间:2024/05/15 17:33
问题描述:
设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设 wij 是从供应商j 处购得的部件i的重量,cij 是相应的价格。
试设计一个回溯算法,对于给定的机器部件重量和机器部件价格,计算总价格不超过c的最小重量机器设计。
算法思想:
n层m叉子集树问题。部件有n个,供应商有m个,分别用w[i][j]和c[i][j]存储从供应商j 处购得的部件i的重量和相应价格,cost为总价格的上限。利用tempc+c[t][i]<=cost进行剪枝,若是到最后一层时,tempw小于之前得到的minw,则对minw和各部件供应商best[n]进行更新。
参考代码如下:
#include<stdio.h>#define N 100int w[N][N];int c[N][N];int best[N],x[N];int n,m;int cost;int tempw=0,tempc=0,minw=10000;void traceback(int t){if(t > n){minw = tempw;for(int i=1;i<=n;i++){best[i] = x[i];}}for(int i=1;i<=m;i++){if(tempw+w[t][i]<minw&&tempc+c[t][i]<=cost){x[t] = i;tempw += w[t][i];tempc += c[t][i];traceback(t+1);tempw -= w[t][i];tempc -= c[t][i];}}}int main(){scanf("%d%d%d",&n,&m,&cost);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&w[i][j]);}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&c[i][j]);}}traceback(1);printf("%d\n",minw);for(int i=1;i<=n;i++){printf("%2d",best[i]);}return 0;}
阅读全文
0 0
- 最小重量机器设计问题(回溯)
- 最小重量机器设计问题 回溯法
- 回溯法:最小重量机器设计问题(python解决)
- 回溯法算法思想解决最小机器重量设计问题
- 回溯法 最小重量机器设计
- 最小机器重量设计问题(回溯法-满m叉树)
- 回溯法解决最小机器重量问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小机器重量设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- 最小重量机器设计问题
- arcgis发布地图发布成功但无法预览问题
- 机器学习算法之随机森林
- MySQL单列索引和组合索引的选择效率与explain分析
- ccf2013_12_1
- Android stdio-002错误集合
- 最小重量机器设计问题(回溯)
- leetcoed 87 Scrcmble String 解题报告
- Redis集群 | 关闭 和 启动 集群
- java多线程(5)wait()、notify()和notityALL()
- android6.0/7.0禁掉Selinux
- HashMap与TreeMap的区别
- spark学习-44-Spark的测量系统MetricsSystem
- 文章标题
- Ubuntu14.04下将java1.7升级到java1.8版本