文章目录

  • 前言
  • 一、题目
  • 二、功能模块图
  • 三、问题分析
  • 四、实验结果及分析
  • 五、源码
  • 总结

前言

20级cqut的别抄!

一、题目

 背包问题的求解:假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2 , … , wn 的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2 + … + wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:
(1,4,3,2)
(1,4,5)
(8,2)
(3,5,2)。

二、功能模块图

三、问题分析

按照问题描述
1.处理好数据读入 。
2.再分别标记背包剩余容量,即当前处理到的物品i,用栈存储需 要放进书包里的物品。
3.在循环里处理数据,当判断到处理完毕,用 break 退出循环。先判断物品能否放入背包,能则压进栈,然后判断剩余容量是否为 0,若为 0,输出结果,并且使栈和i为下一情况,若不为0,则通过进一步判断决i的值和栈的状态。

四、实验结果及分析

背包问题求解:输入测试样,并得出解。与书中测试结果一致。由此判断完成题目要求。

另外还存在以下几种无解情况,当背包体积过大,或物品体积过大时均无解,如下所示。

五、源码

main.cpp

#include<iostream>
#include<cstdlib>
#include <stack>
#define max 1000
using namespace std;
int main() {// read the datasint T, n;int W[max];bool found = false;cout << "请输入背包大小: ";cin >> T;cout <<endl << "输入物品数量 : ";cin >> n;cout <<endl << "输入物品体积 : " <<endl;for (int j = 0; j < n; j++) cin >> W[j];cout << endl << "解有 : " << endl;// processint left = T;stack<int> s;int i = 0;while (1) {if (left == W[i] || (left > W[i] && i < n)) {  // 可以放进背包的情况s.push(i);left -= W[i];}if (left == 0) {  // 刚好装满// 标记found = true;// 输出结果stack<int> t;while (!s.empty()) {t.push( s.top());s.pop();}cout << "( ";while (!t.empty()) {cout << W[t.top()] << " ";s.push(t.top());t.pop();}cout << ")" <<endl;// 处理下一情况if (s.size() == 1) {left += W[s.top()];s.pop();i++;if (i == n) break;} else if (i == n-1) {left += W[s.top()];s.pop();i = s.top() + 1;left += W[s.top()];s.pop();} else {i = s.top() + 1;left += W[s.top()];s.pop();}} else {  // 不能装满if (i == n-1) {  // i遍历到最后一个物品if (s.size() == 1 && s.top() == n - 1) {break;} else {if (i == s.top()) {left += W[s.top()];s.pop();i = s.top() + 1;left += W[s.top()];s.pop();} else {i = s.top() + 1;left += W[s.top()];s.pop();}}} else {  // 其他情况i++;}}}if (found == false) cout << "无解" << endl;system("pause");return 0;
}

总结

此为本人2022年大二下学期数据结构课设中的一道题目。特此记录。

背包问题求解(数据结构课设)相关推荐

  1. 那些年,我的数据结构课设,现在满满的回忆!(现如今身处内卷之中,已经很难出现当初那份乐趣了)

    一.看到这个图标很有感觉 距离当初完成数据结构课设已经过去很久很久了,当初由于U盘失踪,也丢失了很多宝贵的东西,我也伤心的好久`(>﹏<)′!不过最近找到了失散多年的亲兄弟,打开U盘,感概 ...

  2. 南京航空航天大学2020数据结构课设

    南京航空航天大学2020数据结构课设 目录 1.系统进程设计 2.迷宫问题 3.家谱管理系统 4.Huffman编码与解码 5.地铁修建 6.公交线路提示 7.B-树应用 8.排序算法比较 9.数字排 ...

  3. 学生搭配问题数据结构报告c语言,数据结构课设学生搭配问题

    数据结构课设学生搭配问题 数 据 结 构 课程设计报告书 班级 学号 专业 姓名 课题描述: 一. 需求分析: 1. 设计内容 一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编 ...

  4. 数据结构课设_网页形式的景区导游

    一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...

  5. 神秘国度的爱情故事 数据结构课设-广州大学

    神秘国度的爱情故事 数据结构课设-广州大学 ps:本次课设程序不仅需要解决问题,更需要注重代码和算法的优化和数据测试分析      直接广度优先实现的方法时间复杂度为O(QN),优化后的方法是lca+ ...

  6. 模拟浏览器操作程序(数据结构课设)

    文章目录 前言 一.题目 二.系统设计 2.1 功能模块图 2.2 主要功能函数 三.问题分析 四.实验结果及分析 五.源码 总结 前言 20级cqut的别抄! 一.题目  模拟浏览器操作程序:标准的 ...

  7. 华南农业大学课设——数据结构课设、Java课设、操作系统课设

    文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...

  8. 数据结构课设——汉诺塔游戏演示

    源代码下载地址:数据结构课设--汉诺塔游戏演示 一. 问题描述 汉诺塔游戏问题中的数据元素具有如下形式: lchild:左孩子结点 rchild:右孩子结点 num:该移动步骤需要移动的盘子的编号 s ...

  9. 数据结构课设+校园导航系统+西安邮电大学

    数据结构课设+校园导航系统+西安邮电大学 设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息:对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园 ...

最新文章

  1. python mainloop函数_python中的mainloop()函数
  2. 《预训练周刊》第8期:首个千亿中文大模型「盘古」问世、谷歌等提出视频音频文本转换器VATT...
  3. 高精度矢量汉字的一种填充方法_使用PS中的钢笔工具制作一只蝴蝶矢量插画
  4. JavaUtil_00_资源帖
  5. 算法之组合数学及其算法篇(三) ----- 容斥原理应用以及几个典型的递归关系
  6. 十分钟让你明白AIDL
  7. ipython下怎么运行py文件_在IPython中执行Python程序文件的示例
  8. Oracle 数据块损坏与恢复具体解释
  9. IDEA将web项目打成war包
  10. 山东工商学院 计算机科学与技术,实验中心-山东工商学院计算机科学与技术学院...
  11. Android 圆形进度条
  12. 鼎捷T100标准接口调用
  13. win7录屏_win7/win10电脑屏幕录像工具哪款比较好?--QVE屏幕录制
  14. 前端cookie 放到请求头_ajax请求头cookie问题
  15. CCS之最少拍控制器设计
  16. 2020年全国工业固体废物、危险废物产生量、利用处置量及防治措施分析[图]
  17. Python画图源码|玫瑰花|皮卡丘|小猪佩奇|哆啦A梦|大白|小猫
  18. page fault
  19. Striped64 与 LongAdder
  20. linux6.5 xmanager配置,CentOS6.5安装Xmanager远程桌面

热门文章

  1. 关于Retrofit用法
  2. 计算机网络国际会议排名,科学网—计算机相关国际会议排名 - 刘耀的博文
  3. 前端初学学习进程XII
  4. Linux性能学习(1.4):CPU_如何查看CPU上下文切换参数
  5. 习惯养成微信小程序的设计与实现
  6. Python 命令行参数详解
  7. 海尔集团的的具体营销策略和营销管理
  8. 专利挖掘及专利布局规划
  9. 杭电1099_杭电数学题合集
  10. android通知栏屏蔽访客模式