分支限界算法

1、装载问题
int MaxLoading()
{
 queue<int> Q;
 Q.push(-1);
 int i = 0;
 int Ew = 0;
 int bestw = 0;
 int r = 0;
 for(int j=1; j<n; j++)
  r += w[j];
 //搜索子空间树
 while (true)
 {
  //检查左子树
  int wt = Ew+w[i];
  if (wt<=c)  //检查约束条件
  {
   if (wt>bestw) bestw = wt;
   //加入活结点队列
   if (i<n-1) Q.push(wt);
  }
  //检查右子树
  //检查上界条件
  if (Ew+r>bestw && i<n-1) 
    Q.push(Ew);
  //从队列中取出活结点
  Ew = Q.front();
  Q.pop();
  if (Ew==-1)  //判断同层的尾部
  {
   if (Q.empty()) return bestw;
   //同层结点尾部标志
   Q.push(-1);
   //从队列中取出活结点
   Ew = Q.front();
   Q.pop();
   i++;
   r -= w[i];
  }
 }
 return bestw;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值