- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与设计实验报告-0-1背包问题、旅行售货员问题[精选]
实验报告
课程 计算机算法设计与分析 实验名称 0-1背包问题、旅行售货员问题 学号 姓名 实验日期:
实验五 0-1背包问题、旅行售货员问题
一.实验目的
学习0-1背包问题的简单算法,掌握原理,运用C++编程实现。
学习旅行售货员问题的简单算法,掌握原理,运用C++编程实现。
二.实验内容
(1)设计0-1背包问题的算法,上机编程实现。
(2)设计旅行售货员问题的算法,上机编程实现。
三.实验代码
1 . 0-1背包问题的程序代码如下:
#includeiostream
#includestack
using namespace std;
#define N 100
class
HeapNode //定义HeapNode结点类
{ public:
double
upper,price,weight; //upper为结点的价值上界,price是结点所对应的价值,weight为结点所相应的重量
int level,x[N]; //活节点在子集树中所处的层序号
};
double MaxBound(int i);
double Knap();
void AddLiveNode(double up,double cp,double cw,bool ch,int level);
stackHeapNode
High; //最大队High
double w[N],p[N]; //把物品重量和价值定义为双精度浮点数
double cw,cp,c=100; //cw为当前重量,cp为当前价值,定义背包容量为100
int n=5; //货物数量为3
int main()
{ cout请按顺序输入5个物品的重量:(按回车键区分每个物品的重量)endl;
int i;
for(i=1;i=n;i++)
cinw[i]; //输入5个物品的重量
cout请按顺序输入5个物品的价值:(按回车键区分每个物品的价值)endl;
for(i=1;i=n;i++)
cinp[i]; //输入5个物品的价值
cout最大价值为:;
coutKnap()endl; //调用knap函数 输出最大价值
return 0;
}
double MaxBound(int j) //MaxBound函数求最大上界
{ double
left=c-cw,b=cp; //剩余容量和价值上界
while(j=nw[j]=left) //以物品单位重量价值递减装填剩余容量
{ left-=w[j];
b+=p[j];
j++;
}
if(j=n)
b+=p[j]/w[j]*left; //装填剩余容量装满背包
return b;
}
void AddLiveNode(double up,double cp,double cw,bool ch,int lev)
//将一个新的活结点插入到子集数和最大堆High中
{ HeapNode be;
be.upper=up;
be.price=cp;
be.weight=cw;
be.level=lev;
if(lev=n)
High.push(be); //调用stack头文件的push函数
}
double Knap() //优先队列分支限界法,返回最大价值,bestx返回最优解
{ int i=1; cw=cp=0; double
bestp=0,up=MaxBound(1); //调用MaxBound求出价值上界,best为最优值
while(1) //非叶子结点
{ double wt=cw+w[i];
if(wt=c) //左儿子结点为可行结点
{ if(cp+p[i]bestp) bestp=cp+p[i];
AddLiveNode(up,cp+p[i],cw+w[i],true,i+1);
}
up=MaxBound(i+1);
if(up=bestp) //右子数可能含最优解
AddLiveNode(up,cp,cw,false,i+1);
if(High.empty()) return bestp;
HeapNode node=High.top(); //取下一扩展结点
High.pop(); cw=node.weight; cp=node.price; up=node.upper;
i=node.level; }
}
2. 旅行售货员问题的程序代码如下:
#include stdio.h
#include istream
using n
您可能关注的文档
- 第五课 第二节 青春的心弦 教学设计参照.doc
- 第五编 宋代文学参照.doc
- 第五课 爱丑之欲的 翻译参照.doc
- 第五部分 书面表达参照.doc
- 第五部分练习参照.doc
- 第八单元教案参照.doc
- 第八章 净化压缩空气系统的验证参照.doc
- 第八章 土壤胶体及其对离子的吸附交换作用参照.doc
- 第八章 微生物生态试题及答案参照.doc
- 第八章 金融机构往来的核算参照.doc
- 2024学年第一学期浙江省精诚联盟10月联考高二物理试题含答案及解析.pdf
- 【山东卷】山东省泰安市2024-2025学年高三上学期11月期中考试(11.13-11.15)英语试卷含答案及解析.pdf
- 【浙江卷】浙江省杭州市四校联考2024-2025学年高一上学期10月月考英语试卷含答案及解析.pdf
- 西南大学附中高一10月月考生物试卷含答案及解析.pdf
- 辽宁省县域重点高中协作体2024~2025学年高一上学期10月质量监测试题历史试卷含答案及解析.pdf
- 基于多功能超疏水材料的海水淡化及油水分离研究.pdf
- FKBP5基因多态性与抚养方式对孤儿静息态脑功能的影响.pdf
- 《因明入正理论略抄及后疏》的研习与创作感受.pdf
- HIF-1α、SGK1在子宫内膜增生及子宫内膜癌孕激素抵抗中的表达和意义.pdf
- 初中信息科技大单元教学设计框架构建及应用研究--以《人工智能》大单元为例.pdf
文档评论(0)