装载问题--回溯法解决

装载问题

问题描述

有一批货物重量为wi ,需要将其装入两艘货轮,货轮限重c1、c2,现在问其能否成功全部装入货轮,若可以请输出一种装载方案。

问题分析

易知,如果我们先尽可能的将其中一艘货轮装满(使其装载量达到不超过其限重的最大值),剩下的重量如不能装入第二艘货轮,即不能装入。

所以我们主要解决的是 要怎样使第一艘货轮达到最大值

这个问题的解决方案有许多种:

  1. 动态规划
  2. 深搜–回溯法
  3. 广搜–分支限界法

此文章主要讲解深搜–回溯法

此问题与极大团的思路相似,对于每个货物都是有两种可能(放入第一艘或不放),于是这样我们可以很清楚的构造出一棵二叉树,其叶子结点有2n个。
并且在不放入的情况下,需要计算其是否可以成为最大装载的潜力,若没有,则把这一条分支剪掉。

代码实现

数据结构的设计

bw记录最优解的重量
bx[] 数组记录最优解的方案
cw记录当前搜索下假设已经装入的重量
r记录剩余的重量
x[]记录是否装入

代码

#include <iostream>
using namespace std;
int bw,cw;
int r;
int x[i],bx[i];
int w[i];

int n,c1,c
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值