实验 4 用分支限界法实现0-1背包问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四用分支限界法实现0-1背包问题

一.实验目的

1.熟悉分支限界法的基本原理。

2.通过本次实验加深对分支限界法的理解。??

二.实验内容及要求

};

double MaxBound(int i);

double Knap();

void AddLiveNode(double up,double cp,double cw,bool ch,int level);//up是价值上界,cp是相应的价值,cw是该结点所相应的重量,ch是tureorfalse

stackHigh;//最大队High

double w[N],p[N];//把物品重量和价值定义为双精度浮点数

double cw,cp,c;//cw为当前重量,cp为当前价值,定义背包容量为c

int n;//货物数量为

int main()

{

cout<<"请输入背包容量:"<

cin>>c;

{

double cleft=c-cw;//剩余容量

double b=cp;//价值上界

while(k<=n&&w[k]<=cleft)//以物品单位重量价值递减装填剩余容量{

cleft-=w[k];

b+=p[k];

k++;

}

if(k<=n)

b+=p[k]/w[k]*cleft;//装填剩余容量装满背包return b;

cw=cp=0;

double bestp=0;//best为当前最优值

double up=MaxBound(1);//价值上界

//搜索子集空间树while(1)//非叶子结点

{

double wt=cw+w[i];

if(wt<=c)//左儿子结点为可行结点

{

if(cp+p[i]>bestp)

bestp=cp+p[i];

AddLiveNode(up,cp+p[i],cw+w[i],true,i+1);

相关文档
最新文档