- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学位论文-算法分析与设计实验报告
安 徽 工 业 大 学
专 业:
班 级:
姓 名:
学 号:
实验一:回溯法完成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);
}
}
//计算当前节点处的上界
float Bound(int i)
{
int cleft = c-cw; //剩余容量
float b = cp;
while (inbag[i].w=cleft)
{
//以物品单位重量价值递减序装入
cleft-=bag[i].w ;
b+=bag[i].v;
i++;
}
//装满背包
if (in) b+=1.0*bag[i].v/bag[i].w * cleft;
return b;
}
void Knapsack() //计算最优解和变量值
{
int L(0); //用L累计价值,初始价值设置为0
for(int k=0;kn;k++)
{
x[bag[k].kk]=bag[k].flag; //x=0表示未放入背包,x=1表示放入背包
L+=bag[k].flag*bag[k].v; //价值累加
}
coutendl;
cout当前最优价值为:Lendl;
cout变量值 x = ;
for(int i=1;i=n;i++)
{
coutx[i-1];
}
delete []bag; bag=NULL;
delete []x; x=NULL;
coutendl; getch();
}
int main()
{
coutendl;
cout|**********回溯法解0-1背包问题**********|endl;
Init();
Backtrack(0);
Knapsack();
return 0;
}
您可能关注的文档
- 学位论文-数字电子技术课程设计数字电子钟设计.doc
- 学位论文-数字电子钟逻辑电路设计.doc
- 学位论文-数字式秒表单片机数字秒表课程设计.doc
- 学位论文-数字图像处理课程设计.doc
- 学位论文-数字信号处理课程设计用双线性变换法设计高通和带通数字滤波器.doc
- 学位论文-数字信号处理课程设计报告语音信号的数字滤波处理.doc
- 学位论文-数显磁力搅拌器的设计与制作电气工程及其自动化专业(电力拖动方向).doc
- 学位论文-双级斜齿圆柱减速器机械设计制造课程设计说明书.doc
- 学位论文-双级斜齿圆柱减速器机械课程设计说明书.doc
- 学位论文-双级展开式斜齿圆柱齿轮减速器机械设计计算说明书.doc
- 《GB/Z 44363-2024致热性 医疗器械热原试验的原理和方法》.pdf
- GB/T 16716.6-2024包装与环境 第6部分:有机循环.pdf
- 中国国家标准 GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统.pdf
- 《GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统》.pdf
- GB/T 44376.1-2024微细气泡技术 水处理应用 第1 部分:亚甲基蓝脱色法评价臭氧微细气泡水发生系统.pdf
- 中国国家标准 GB/T 44315-2024科技馆展品设计通用要求.pdf
- GB/T 44305.2-2024塑料 增塑聚氯乙烯(PVC-P)模塑和挤塑材料 第2部分:试样制备和性能测定.pdf
- 《GB/T 44315-2024科技馆展品设计通用要求》.pdf
- GB/T 44315-2024科技馆展品设计通用要求.pdf
- GB/T 39560.9-2024电子电气产品中某些物质的测定 第9 部分:气相色谱-质谱法(GC-MS)测定聚合物中的六溴环十二烷.pdf
文档评论(0)