数据结构背包问题c语言思路,C语言学习趣事_数据结构_经典命题_1_背包问题_分析_1...
/*1.问题描述
假设有一个能装入总体积为T的背包和n件体积分别为w1,w2,…wn的物品,
能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wm=T,
要求找出所有满足上述条件的解。
例如:
当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:
(1,4,3,2)
(1,4,5)
(8,2)
(3,5,2)。
2.实现提示
可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后,
顺序选取物品装入背包,若已选取第i件物品后未满,则继续选取第i+1件,
若该件物品“太大”不能装入,则弃之,继续选取下一件,直至背包装满为止。
如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入的物品
“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此
重复,直到求得满足条件的解,或者无解。
由于回溯求解的规则是“后进先出”,自然要用到“栈”。
3.进一步考虑:
如果每件物品都有体积和价值,背包又有大小限制,求解背包中存放物
品总价值最大的问题解---最优解或近似最优解。*/#include#includestructnode
{intsum;inti;
};
typedefstructnode NODE;intgetmemory(int**p,intsize)
{if(0>=size)returnNULL;if(NULL==(*p=(int*)malloc(size*(sizeof(int)))))return0;elsereturn1;
}intassignvalue(int*dest,intsize)
{if(NULL==dest)return0;while(size>0)
{
scanf("%d",dest);
dest++;
size--;
}return1;
}intsolution(int*source,intvolume,intsize)
{inti,
j;//j用来存储相对栈首地址的便宜量int*stack;//申请的栈空间int*header;
NODE temp;if(NULL==source||0==volume||0==size)return0;if(NULL==(stack=(int*)malloc(size*sizeof(int))))return0;
header=stack;for(i=0;i
{
stack=header;//每一次循环都使栈回到首地址j=0;//每一次循环都使栈的空间使用率为0;temp.i=temp.sum=0;//每一次循环都将使和以及空间计数值变为0;//每次运算需要计算的次数, 第一次循环需要对size个值进行检验//第二次循环则需要对size-i个值进行检验while(temp.i<=size-i)
{
j++;
temp.sum+=*(source+i+temp.i);*stack=*(source+i+temp.i);
stack++;if(temp.sum==volume)//当求出来的和与容积大小相等时就输出{while(j>0)
{
printf("%d",*(stack-1));
j--;
stack--;
}
putchar('\n');//输出完毕就跳出循环,继续对下一轮的数据进行求和}if(temp.sum
temp.i++;continue;
}if(temp.sum>volume)//如果取出来的值加上大于容积,则丢弃,同时将刚压栈的数据出栈{
temp.sum-=*(source+i+temp.i);
temp.i++;*stack=0;
j--;
stack--;continue;
}//end of if}//end of while}//end of forfree(stack);
free(header);return1;
}intmain(intargc,char*argv[])
{intsize;intvolume;int*number;
number=NULL;
printf("input the total number of the package:");
scanf("%d",&size);
printf("\nEnter the elements in the package:\n");if(!getmemory(&number,size)) exit(1);if(!assignvalue(number,size)) exit(1);
puts("\nPlease enter the volum of the package:");
scanf("%d",&volume);if(0==solution(number,volume,size))
exit(1);return0;
}
数据结构背包问题c语言思路,C语言学习趣事_数据结构_经典命题_1_背包问题_分析_1...相关推荐
- python的基本数据结构_Python学习笔记——基本数据结构
列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 左高树
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 优先级队列 - 左高树 一.左高树 1.外部节点 2.高度优先左高树 (1)定义 (2)特性 (3)HBLT 与 大小根树 3. ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 竞赛树 一.赢者树 二.二叉树的数组描述(补充) 1.声明 2.实现 三.赢者树 1.抽象数据类型 2.赢者树的表示 3.声明 ...
- C语言学习趣事_之_大数运算_加法
C语言学习趣事_大数运算_之加法 1.引子 在C语言中,因为预定义的自然数类型的大小是有上下限度的,这就决定了在进行数的运算的时候,必然受到限制,同时因为C语言是最接近汇编的一种程序设计语言,并 ...
- GO语言的进阶之路-Golang高级数据结构定义
GO语言的进阶之路-Golang高级数据结构定义 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过Golang的基本数据类型,字符串和byte,以及rune也有所了解, ...
- C语言编程入门新手学习精华:这样学习C语言最有效
1. C语言已死吗? 本资料描述的是使用C语言的高级技巧,力求将你的C语言能力由"基础"提升为"高级".但是学习态度胜过学习方法,在正式学习之前,有一个问题不吐 ...
- 数据结构与算法课程设计——C语言《职员薪资查询系统》
数据结构与算法课程设计--C语言<职员薪资查询系统> 温馨提示:课设要自己去操作,自己写代码,可以借鉴他人代码,学习思路和一些操作,切不可完全抄袭!!! 总体说明:设计一个职员薪资查询系统 ...
- 数据结构课程设计—同学录管理系统(c语言)
数据结构课程设计-同学录管理系统(c语言) 文章目录 前言 一.需求分析 二.总体设计 三.代码实现 四.代码说明 前言 计算机相关专业在学习数据结构这门课程时会有课程设计,我被分配到的是同学录管理系 ...
最新文章
- 如何在CPU上优化GEMM(上)
- php 点击删除数据,使用php脚本删除数据
- ACCV2020国际细粒度网络图像识别冠军方案解读、经验总结
- 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...
- Intellij Idea: Thymeleaf 命名空间th报错
- 论文笔记:语音情感识别(二)声谱图+CRNN
- Abaqus帮助文档翻译——菜单栏构成
- unicode什么意思中文_请问Unicode中文,日文,韩文,西欧语言等的编码区间是什么?...
- php程序员工具箱 v,php工具箱下载_php工具箱 v1.0官方版_魅蓝下载
- 联想硬盘保护系统安装
- 误差理论与数据处理(一)
- 银河麒麟v10_银河麒麟:V10究竟哪里好?开箱测评,瞬间明了!
- c语言程序设计第六章习题答案,C语言程序设计(第2版) 刘克威,张凌晓著 习题答案-第六章...
- C程序设计 谭浩强 第九章
- 不是不给你,而是你承受不住
- 路由器分出ITV与网络信号资料
- 下雪了堆雪人去 下雪特效
- android 微信 功能,安卓版微信悄悄更新,这项功能彻底消失!
- Verilog的always块内的常见问题:边沿电平、同步异步、阻塞非阻塞
- mysqldump数据备份
热门文章
- 图卷积神经网络GCN---递归GCN代表作
- 全球最厉害的14位程序员是谁?我们来膜拜下这些大神都有哪些?
- python tokenize怎么用_使用python nltk.tokenize时,如何将包含stopwords的短语视为单个标记?...
- 学生python编程--学习列表绘制彩虹
- 大学四年,总结一套适合小白的Java自学路线和方法
- 小甲鱼python课程学习_部分
- 树莓派 | 串口01 - 在系统上修改串口的映射关系
- 如何创建一个Python Pandas的DataFrame变量,如何给一个DataFrame对象添加新的一行数据?
- QT中QSS的使用记录
- 冒泡排序及C语言代码