背包问题的C语言实现
2012-03-27 20:55
295 查看
参考一个既有的算法实现了背包问题,算法思路见程序注释。
View Code
View Code
/* * Fredric 2012-3-27 * 背包问题 */ #include <stdio.h> #include <stdlib.h> #define N (100) typedef enum E_STATUS{ E_STATUS_NO, E_STATUS_YES, }; typedef struct tagNode{ double weight; double value; }stNode; int num = 6; stNode gNode = {{5,4},{3,4},{2,3},{1,1},{2,2},{3,4}}; E_STATUS etempRes ; //临时解 E_STATUS eFinalRes ; //最终解 double limitWeight = 14; double totalValue; double maxValue; /* * 确认第i个背包是否被选择 * i:第i个背包选择的可能; * weight:当前选择的总重量 * value: 当前选择可能到达的最大价值 * * 该算法的实现相当于遍历每个背包选中或不选中的所有可能 */ void search(int i, double weight, double value){ //背包i可以被选中 if (gNode[i].weight + weight < limitWeight) { etempRes[i] = E_STATUS_YES; if (i < num){ search(i + 1, gNode[i].weight + weight, value); }else{ for (int i = 0; i < num; i++) { eFinalRes[i] = etempRes[i]; } maxValue = value; } etempRes[i] = E_STATUS_NO; } if (value - gNode[i].value > maxValue) { if (i < num){ search(i + 1, weight, value - gNode[i].value); }else{ for (int i = 0; i < num; i++) { eFinalRes[i] = etempRes[i]; } maxValue = value - gNode[i].value; } } return; } void main(void) { for (int i = 0; i < num; i++) { eFinalRes[i] = E_STATUS_NO; etempRes[i] = E_STATUS_NO; totalValue += gNode[i].value; } search(0, 0.0, totalValue); for (i = 0; i < num; i++) { printf("No.%d status:%d\r\n", i, eFinalRes[i]); } system("pause"); return; }
相关文章推荐
- 0-1背包和背包问题(C语言实现)——贪心算法应用(3)
- [算法]背包问题的经典算法和贪心算法解答,C语言实现
- DP实例之01背包问题C语言实现
- [算法]背包问题的动态规划算法解答,C语言实现
- 背包问题-C语言实现
- 01背包问题 动态规划 c语言实现
- [算法]简单的背包问题递归解法,C语言实现
- 01背包问题(用c语言实现)-回溯法求解
- [算法]数据结构算法背包问题解法之递归解法,C语言实现
- 背包问题的C语言实现
- 0-1背包问题-C语言实现
- 八皇后问题的C语言实现
- 0/1背包问题算法的python实现
- 背包问题——“01背包”详解及实现(包含背包中具体物品的求解)
- 贪心法部分背包问题的实现
- 动态规划(背包问题,最长递增子序列,硬币问题)java实现
- 汉诺塔问题c语言实现
- 蓝桥杯 - 算法训练 接水问题 C语言实现
- 【算法数据结构Java实现】Java实现动态规划(背包问题)
- 背包问题---01背包最优方案总数(原理剖析代码实现)