回溯最小重量機(jī)器設(shè)計(jì)問(wèn)題



設(shè)某一機(jī)器由n個(gè)部件組成,每一種價(jià)格都可以從m個(gè)不同的供應(yīng)商處購(gòu)得。設(shè)wij是從供應(yīng)商j處購(gòu)得的部件i的重量,cij是相應(yīng)的價(jià)格。 試設(shè)計(jì)一個(gè)算法,給出總價(jià)格不超過(guò)d的最小重量機(jī)器設(shè)計(jì)。

分析:

供應(yīng)商為m,這是一個(gè)m叉樹(shù),邏輯倒不是很難,就是記錄部件從哪個(gè)廠商購(gòu)得時(shí),注意一下即可。

代碼:

#include<stdio.h>
#define n 3    //部件數(shù)
#define m 3    //供應(yīng)商
#define d 4    //總價(jià)格不超過(guò)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記錄部件的最終供應(yīng)商,a記錄過(guò)程中的供應(yīng)商 
int minweight=1000000;      //最終的最小質(zhì)量
int weight=0,value=0;     //兩個(gè)過(guò)程值
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++){  //遍歷的是供應(yīng)商 
            a[t]=i; //記錄一下當(dāng)前的這個(gè)部件是從哪個(gè)供應(yīng)商購(gòu)得
            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;
} 
運(yùn)行截圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1990 年8 月8 日發(fā)布1991 年4 月9 日第一次修訂1998 年8 月20 日第二次修訂2007 年4 ...
    littlelan閱讀 8,023評(píng)論 0 4
  • 系統(tǒng) arch 顯示機(jī)器的處理器架構(gòu)(1) uname -m 顯示機(jī)器的處理器架構(gòu)(2) uname -r 顯示正...
    莎楽哥哥鴨閱讀 814評(píng)論 1 51
  • 做到名符其實(shí),是一個(gè)優(yōu)良的團(tuán)隊(duì), 能做到名符其實(shí)又印象深刻,就令人讚嘆了! 第一次參加好創(chuàng)意的尾牙, 從闖關(guān)報(bào)到活...
    品思陳資璧Phoebe閱讀 151評(píng)論 1 1
  • int l = str.lastIndexOf() 從后面開(kāi)始找 找最后一次出現(xiàn)的 int l = str.la...
    牛嘉棋閱讀 389評(píng)論 0 0
  • 安雯是個(gè)沉默寡言的孩子。似乎生來(lái)就是這樣。她的媽媽評(píng)價(jià)她:好養(yǎng)的很呢!沒(méi)費(fèi)著力氣就長(zhǎng)大了!像吹氣球吹大般的安雯底下...
    白水百味閱讀 545評(píng)論 0 1

友情鏈接更多精彩內(nèi)容