回溯最小重量机器设计问题



设某一机器由n个部件组成,每一种价格都可以从m个不同的供应商处购得。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。 试设计一个算法,给出总价格不超过d的最小重量机器设计。

分析:

供应商为m,这是一个m叉树,逻辑倒不是很难,就是记录部件从哪个厂商购得时,注意一下即可。

代码:

#include<stdio.h>
#define n 3    //部件数
#define m 3    //供应商
#define d 4    //总价格不超过d
int w[n][n]={1,2,3,3,2,1,2,2,2},c[n][n]={1,2,3,3,2,1,2,2,2}; 
int a[n]={0},final[n]={0}; //final记录部件的最终供应商,a记录过程中的供应商 
int minweight=1000000;      //最终的最小质量
int weight=0,value=0;     //两个过程值
void traceback(int t){
    if(t==3&&value<=d){
        if(weight<minweight){
            minweight=weight;
            for(int k=0;k<n;k++){
                final[k]=a[k];
            }
        } 
        return;
    }
    if(value<=d){
        for(int i=0;i<m;i++){  //遍历的是供应商 
            a[t]=i; //记录一下当前的这个部件是从哪个供应商购得
            weight+=w[t][i];    
            value+=c[t][i];
            traceback(t+1);
            value-=c[t][i];
            weight-=w[t][i];
            a[t]=0;
        }
    }
} 

int main(){
    traceback(0);           //t代表部件 
    printf("最小重量是%d\n",minweight); 
    for(int i=0;i<n;i++)
        printf("%3d",final[i]+1);
    printf("\n");   
    return 0;
} 
运行截图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1990 年8 月8 日发布1991 年4 月9 日第一次修订1998 年8 月20 日第二次修订2007 年4 ...
    littlelan阅读 8,022评论 0 4
  • 系统 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正...
    莎楽哥哥鸭阅读 812评论 1 51
  • 做到名符其實,是一個優良的團隊, 能做到名符其實又印象深刻,就令人讚嘆了! 第一次參加好創意的尾牙, 從闖關報到活...
    品思陈资璧Phoebe阅读 151评论 1 1
  • int l = str.lastIndexOf() 从后面开始找 找最后一次出现的 int l = str.la...
    牛嘉棋阅读 389评论 0 0
  • 安雯是个沉默寡言的孩子。似乎生来就是这样。她的妈妈评价她:好养的很呢!没费着力气就长大了!像吹气球吹大般的安雯底下...
    白水百味阅读 544评论 0 1

友情链接更多精彩内容