- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数学0902班0901020216
运筹学课程设计 -------背包问题c语言解法 背包问题 问题背景:假设有一个能装入总体积为V的背包和m件体积分别为v1 , v2 , … vm的物品,能否从m件物品中挑选若干件恰好装满背包,即使v1 +v2 + … + vm=V,要求找出所有满足上述条件的解。 例如:当V=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解: (1,4,3,2) (1,4,5) (8,2) (3,5,2) 问题分析 首先应考虑如何选择第i件物品: (1) 考虑物品i被选择,这种可能性仅当包含它不会超过方案总重量限制时才是可行的。选中后,继续去考虑其余物品的选择。 (2) 考虑物品i不被选择,这种可能性仅当不包含物品i也有可能会找到价值更大的方案的情况。 拟用解决办法 由上面问题的提出,我觉得可利用回溯法的设计思想来解决此背包问题。即首先将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i 件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从它之后的物品中选取,如此重复,直至求得满足条件的解,或者无解。 主要算法步骤 1·输入物品总个数。 2·依次输入各物品的体积。 3·输入背包总体积。 4·将物品排成一列,按顺序选取物品装入背包中,当物品太大不能装入时则弃之继续选取下一件,直到背包装满为止。 5·出现在剩余的物品中找不到合适的物品填满背包的情况是说明刚刚装入背包的那件物品不适合,将它取出后继续选取后面的物品。 6·重复步骤4和5直至求出满足条件的解或者无解。 程序调试 1·如果在选择过程中的任何时刻,选择的数据项的总和符合目标重量,工作就完成了。 2·逐个地试每种剩余数据顶组合的可能性。但并不需要去试所有的组合,因为只要数据项的和大于目标重量的时候,就停止添加数据项。 3·如果设有组合合适的话,放弃第—个数据项,并且从第二个数据项开始再重复过程。 4·继续从第三个数据项开始,如此下去直到已经试过所有的组合。 主要代码和注释 #include stdio.h #define size 20 struct stacks //定义一个临时存储空间结构体(栈) { int data[size];//数组 int top;//作为结构体标记 }stack; void main() { int w[size];//定义数组 int V; int k=0; int i=0; int j=1; int number; int s=0; printf(\n请输入可供选择装入物品的个数:); scanf(%d,number); printf(\n请输入各件物品的体积:); for(i=0;inumber;i++){scanf(%d,w[i]);}//按次序给数组赋值 for(i=0;inumber;i++){ s=s+w[i];}//把数组每个元素加起来 printf(\n可供选择的物品的总体s=%dn,s); printf(\n请输入背包的总体积:); scanf(%d,V); if(V0||Vs){printf(\n输入背包体积错误);}//判断总体积必须大于0或小于物品总体积 printf(\n); for(i=0;inumber;i++){stack.data[i]=0;}//把结构体的data数组的每个元素初始化为0 stack.top=0;//初始化结构体标记为0 do{ while(V0k=number)//当V大于0并且k小于等于物品个数,则运行下面循环 { if(V=w[k])//每次循环判断V变量是否还大于每个元素 { stack.data[stack.top]=k; //符合条件的元素标识记录在结构体的数组中 stack.top++; V-=w[k];//每次循环就把V变量减去该次循环元素的体积数 } k++; }//循环结束 if(V==0){//当v变量只等于0时输出结果 printf(第%d个符合条件的解:,j); for(i=0;istack.top;i++) {printf(%d ,w[stack.data[i]]);} j++; printf(\n); } k=stack.data[--stack.top]; stack.data[stack.top]=0; V+=w[k]; k++; }while(!(stack.t
您可能关注的文档
- 邹平县深入学习实践科学发展观活动工作简报第43期.doc
- 菏泽市2013年初中学业水平考试化学试题(附答案).docx
- 临时起备变受电方案.doc
- 人教版八年级上册物理1杠杆.ppt
- 黄河岸边春来早.doc
- 北京市东城区2011年中考一模英语试题.doc
- LED+按键+数码管程序测试.doc
- 山东工商学院产业经济学课件07.ppt
- 2014年九年级数学复习试题及答案五.doc
- 2013年2-7月口语考试.doc
- 第18讲 第17课 西晋的短暂统一和北方各族的内迁.docx
- 第15讲 第14课 沟通中外文明的“丝绸之路”.docx
- 第13课时 中东 欧洲西部.doc
- 第17讲 第16 课三国鼎立.docx
- 第17讲 第16课 三国鼎立 带解析.docx
- 2024_2025年新教材高中历史课时检测9近代西方的法律与教化含解析新人教版选择性必修1.doc
- 2024_2025学年高二数学下学期期末备考试卷文含解析.docx
- 山西版2024高考政治一轮复习第二单元生产劳动与经营第5课时企业与劳动者教案.docx
- 第16讲 第15课 两汉的科技和文化 带解析.docx
- 第13课 宋元时期的科技与中外交通.docx
最近下载
- 单向板肋梁楼盖计算.docx
- 作业4:工学一体化课程《小型网络安装与调试》工学一体化课程考核方案.docx VIP
- 中国画之写意画.ppt VIP
- (2019苏教)小学科学三年级上册:全册整套教案资料.pdf
- 核心素养导向的高中数学课例设计研究与实践(样例)(1).doc
- 驾驶证延期委托书模板.doc
- 作业5:工学一体化课程《小型网络安装与调试》工学一体化课程终结性考核试题.docx VIP
- 作业5:工学一体化课程《小型网络安装与调试》工学一体化课程终结性考核试题.pdf VIP
- 中国画的构图形式ppt课件.pptx
- 作业11:《小型网络安装与调试》工学一体化课程教学进度计划表.pdf VIP
文档评论(0)