背包问题求解(数据结构课设)
文章目录
- 前言
- 一、题目
- 二、功能模块图
- 三、问题分析
- 四、实验结果及分析
- 五、源码
- 总结
前言
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年大二下学期数据结构课设中的一道题目。特此记录。
背包问题求解(数据结构课设)相关推荐
- 那些年,我的数据结构课设,现在满满的回忆!(现如今身处内卷之中,已经很难出现当初那份乐趣了)
一.看到这个图标很有感觉 距离当初完成数据结构课设已经过去很久很久了,当初由于U盘失踪,也丢失了很多宝贵的东西,我也伤心的好久`(>﹏<)′!不过最近找到了失散多年的亲兄弟,打开U盘,感概 ...
- 南京航空航天大学2020数据结构课设
南京航空航天大学2020数据结构课设 目录 1.系统进程设计 2.迷宫问题 3.家谱管理系统 4.Huffman编码与解码 5.地铁修建 6.公交线路提示 7.B-树应用 8.排序算法比较 9.数字排 ...
- 学生搭配问题数据结构报告c语言,数据结构课设学生搭配问题
数据结构课设学生搭配问题 数 据 结 构 课程设计报告书 班级 学号 专业 姓名 课题描述: 一. 需求分析: 1. 设计内容 一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编 ...
- 数据结构课设_网页形式的景区导游
一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...
- 神秘国度的爱情故事 数据结构课设-广州大学
神秘国度的爱情故事 数据结构课设-广州大学 ps:本次课设程序不仅需要解决问题,更需要注重代码和算法的优化和数据测试分析 直接广度优先实现的方法时间复杂度为O(QN),优化后的方法是lca+ ...
- 模拟浏览器操作程序(数据结构课设)
文章目录 前言 一.题目 二.系统设计 2.1 功能模块图 2.2 主要功能函数 三.问题分析 四.实验结果及分析 五.源码 总结 前言 20级cqut的别抄! 一.题目 模拟浏览器操作程序:标准的 ...
- 华南农业大学课设——数据结构课设、Java课设、操作系统课设
文章目录 缘起 大二上-数据结构课设(高校教学管理系统)-C++.Qt 视频演示 感想 大二下-Java课设(流程图绘制程序)-JavaFX 视频演示 感想 大三上-操作系统课设(模拟磁盘文件系统实现 ...
- 数据结构课设——汉诺塔游戏演示
源代码下载地址:数据结构课设--汉诺塔游戏演示 一. 问题描述 汉诺塔游戏问题中的数据元素具有如下形式: lchild:左孩子结点 rchild:右孩子结点 num:该移动步骤需要移动的盘子的编号 s ...
- 数据结构课设+校园导航系统+西安邮电大学
数据结构课设+校园导航系统+西安邮电大学 设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息:对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园 ...
最新文章
- python mainloop函数_python中的mainloop()函数
- 《预训练周刊》第8期:首个千亿中文大模型「盘古」问世、谷歌等提出视频音频文本转换器VATT...
- 高精度矢量汉字的一种填充方法_使用PS中的钢笔工具制作一只蝴蝶矢量插画
- JavaUtil_00_资源帖
- 算法之组合数学及其算法篇(三) ----- 容斥原理应用以及几个典型的递归关系
- 十分钟让你明白AIDL
- ipython下怎么运行py文件_在IPython中执行Python程序文件的示例
- Oracle 数据块损坏与恢复具体解释
- IDEA将web项目打成war包
- 山东工商学院 计算机科学与技术,实验中心-山东工商学院计算机科学与技术学院...
- Android 圆形进度条
- 鼎捷T100标准接口调用
- win7录屏_win7/win10电脑屏幕录像工具哪款比较好?--QVE屏幕录制
- 前端cookie 放到请求头_ajax请求头cookie问题
- CCS之最少拍控制器设计
- 2020年全国工业固体废物、危险废物产生量、利用处置量及防治措施分析[图]
- Python画图源码|玫瑰花|皮卡丘|小猪佩奇|哆啦A梦|大白|小猫
- page fault
- Striped64 与 LongAdder
- linux6.5 xmanager配置,CentOS6.5安装Xmanager远程桌面