软件工程课程设报告背包问题11.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件工程课程设报告背包问题11

2012-2013学年第1学期“软件工程”课程设计报告 学院/系 信息工程学院计算机科学系 专业 计算机科学与技术 班级 项目名称 背包问题算法演示软件设计 组长 王帅 小组成员 王帅、张宇波、 田方、胡应国 王帅(2402090218) 主要负责代码的编写 张宇波(2402090218) 主要负责报告的书写 田方(2402090227) 主要负责报告的书写 胡应国(2402090209) 主要负责系统的测试 一、问题描述及分类 0-1背包问题:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 多重背包问题:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 完全背包问题:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大 我们这次课程设计要研究的内容是 0-1背包问题:在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品装入背包多次,也不能只装入部分的物品。背包问题是一个特殊的整数规划问题 二、简介 它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放到背包中 来加密消息。背包中的物品总重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物品,在计算上是不可实现的。基本思路 最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 图1 模块调用关系图如下图2 图2 流程图如下图图3: 图3 四、算法: 关键数据结构: 一个数组,一个栈。一个整型变量。 int PerWeight;// 代表每个物品的质量。 pStack pMyStack; // 回溯法时所用到的栈。 int k; // 整个运算过程中数组的索引。 关键的算法代码: do { while (m_BagWeight 0 km_Count) //遍历整个数组把符合条件的数压入栈中 { if (m_BagWeight - PerWeight[k] = 0) { PushStack(k); m_BagWeight = m_BagWeight - PerWeight[k]; } k++; } if (m_BagWeight == 0) //找到合适的解后进行显示处理 { i = 0; pNode pNodeTemp = pTop; while (pNodeTemp != pBase) //遍历整个栈把数据得到 { c[i] = PerWeight[pNodeTemp-DataTemp.num]; i++; pNodeTemp = pNodeTemp-pNext; if (pNodeTemp == NULL) { exit(0); } } str.Format(L第%d组解:,nIndex+1); m_List.InsertItem(nIndex,str); CString str1; if (i == 4) { str1.Format(_T(%d %d %d %d),c[i-4],c[i-3],c[i-2],c[1]); } if (i == 3) { str1.Format(_T(%d %d %d),c[i-3],c[i-2],c[i-1]); } if (i == 2) { str1.Format(_T(%d %d),c[i-2],c[i-1]); } //把所得的数据显示到前台List框 m_List.SetItemText(nIndex,1,str1); memset(c,sizeof(int)*10,0); nIndex++; } k = PopStack(); //把不符合的数据弹出栈。 int temp = PerWeig

文档评论(0)

fcp940 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档