- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
安 徽 工 业 大 学
专 业:
班 级:
姓 名:
学 号:
实验一:回溯法完成 0-1 背包问题
代码如下:
#include stdafx.h
#includeiostream
#includecstdio
#includeconio.h
#includeiomanip
using namespace std;
templateclass ty
class Knap
{
public:
friend void Init();
friend void Knapsack();
friend void Backtrack(int i);
friend float Bound(int i);
bool operator(Knapty a)const
{
if(fla.fl) return true;
else return false;
}
private:
ty w; // 重量
ty v; // 价值
float fl; // 单位重量的价值 v/w
int kk; // 记录第几个物品
int flag; // 记录是否放入包中
};
templateclass ty
void Sort(Knapty *li,int n)
{
int i,j,k; Knapty minl;
for(i=1;in;i++)
{
minl=li[0]; k=0;
for(j=1;j=n-i;j++)
{
if(minlli[j])
{
minl=li[j]; swap(li[j],li[k]); k=j;
}
}
}
}
namespace jie // 命名空间
{
int c=0,n=0;
int *x=NULL;
Knapint *bag=NULL;
int cp=0,cw=0;
int bestp=0;
}
using namespace jie;
void Init()
{
int i=0;
coutendl;
cout 请输入物品数量 n = ;
cinn; coutendl;
cout 请输入背包容量 C = ;
cinc; coutendl;
bag=new Knapint [n];
x=new int[n];
cout 请依次输入 n 个物品的重量 W:endl;
for(i=0;in;i++)
cinbag[i].w;
coutendl;
cout 请依次输入 n 个物品的价值 P:endl;
for(i=0;in;i++)
cinbag[i].v;
for(i=0;in;i++)
{
bag[i].flag=0; bag[i].kk=i;
bag[i].fl=1.0*bag[i].v/bag[i].w;
}
}
void Backtrack(int i)
{
if(i=n) // 到达叶节点
{
bestp=cp; // 更新最优价值
return;
}
if(cw+bag[i].w=c) // 进入左子树
{
bag[i].flag=1; cw+=bag[i].w;
cp+=bag[i].v; Backtrack(i+1);
cw-=bag[i].w; cp-=bag[i].v;
}
if(Bound(i+1)bestp)// 进入右子树
{
bag[i].flag=0; Backtrack(i+1);
}
}
// 计算当前
原创力文档


文档评论(0)