实验四用分支限界法实?/p>
0-1
背包问题
一.实验目?/p>
1.
熟悉分支限界法的基本原理?/p>
2.
通过本次实验加深对分支限界法的理解?/p>
??
二.实验内容及要?/p>
内容?/p>
.
给定
n
种物品和一个背包。物?/p>
i
的重量是
w
,其价值为
v
,背包容量为
c
。问应该如何?/p>
择装入背包的物品,使得装入背包中物品的总价值最?/p>
?
要求?/p>
使用优先队列式分支限界法算法编程,求?/p>
0-1
背包问题
三.程序列表
#include
<iostream>
#include
<stack>
usingnamespace
std;
#define
N
100
class
HeapNode
//
定义
HeapNode
结点?/p>
{
public
:
double
upper,price,weight;
//upper
为结点的价值上界,
price
是结点所对应的价值,
weight
为结点所相应的重?/p>
int
level,x[
N
];
//
活节点在子集树中所处的层序?/p>
};
double
MaxBound(
int
i);
double
Knap();
void
AddLiveNode(
double
up,
double
cp,
double
cw,
bool
ch,
int
level);
//up
是价值上界,
cp
是相应的价值,
cw
是该结点所?/p>
应的重量?/p>
ch
?/p>
tureorfalse
stack
<
HeapNode
>High;
//
最大队
High
double
w[
N
],p[
N
];
//
把物品重量和价值定义为双精度浮点数