实验 4 用分支限界法实现0-1背包问题
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
stack
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);