当前位置:编程学习 > C/C++ >>

装载问题之二

 [cpp]/*
    上界函数
*/ 
#include <stdio.h> 
#include <stdlib.h> 
#define MAXSIZE 100 
//全局变量 
int n;                  //集装箱个数 
int c;                  //容量 
int r;                  //剩余容量 
int w[MAXSIZE];         //集装箱重量 
int cw;                 //当前重量 
int bestw;              //最优重量 
//输入函数 
void input(); 
//初始化函数 
void init(); 
//回溯法 
void backtrack(int); 
 
int main(void) 

    while (1) 
    { 
        input(); 
        init(); 
        backtrack(0); 
        printf("%d\n", bestw); 
    } 
    return 0; 

 
//输入函数 
void input() 

    int i = 0; 
    printf("please enter n:"); 
    scanf("%d", &n); 
    printf("please enter c:"); 
    scanf("%d", &c); 
    for (i = 0; i < n; ++i) 
    { 
        scanf("%d", &w[i]); 
    } 

//初始化函数 
void init() 

    int i = 0; 
    cw = 0; 
    bestw = 0; 
    for (i = 0; i < n; ++i) 
    { 
        r += w[i]; 
    } 

//回溯法 
void backtrack(int t) 

    if (t >= n) 
    { 
        if (cw > bestw) 
        { 
            bestw = cw; 
        } 
    } 
    else 
    { 
        //左子树 
        r -= w[t]; 
        cw += w[t]; 
        if (cw <= c) 
        { 
            backtrack(t + 1); 
        } 
        //右子树 
        cw -= w[t]; 
        if (cw + r > bestw) 
        { 
            backtrack(t + 1); 
        } 
        r += w[t]; 
    } 


作者:fcwr_zhuxin_fcwr
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,