[算法]数据结构算法背包问题解法之递归解法,C语言实现
2016-08-16 10:39
731 查看
今天讲背包问题的最后一种解法,递归解法,这种解法也是目前算法教材上讲的基本解法之一,如果你有一本关于这类算法的书籍,一般都可以找到你想要的算法,背包问题具体是什么,大家可以参考我的以前的文章,可以直接到下面的相关链接里面找到,我在最近发布关于背包问题的基本解法,动态规划解法,回溯解法,大家可以直接参照我的页面链接,如果具体还有问题不懂的话,也非常欢迎大家留言
好的,讲一讲递归算法,我提供的算法是使用了有效重量,最大可用价值作为递归参数逐个测试物件的重量和价值,直到找到最佳的侯返回,请注意,这里我设置的条件是只要满足背包可以放就可以,并不是贪心算法,请注意区别。
其他的问题相信大家看完代码注释就可以理解,如果大家还有不明白的地方,欢迎留言,我会尽量解答,最近博主要忙于考试,可能最近比价忙,所以还请见谅
代码如下:
调试环境:GCC ,TC
--------------------------------------------------------------------------------------
- 版权声明:
- 如在本页面内无特别说明,本文内容均为[李大仁博客]原创,本文版权归[李大仁博客]所有。
- 欢迎转载,转载请务必在文章页面明显位置提供原文链接并注明出处。欢迎您在转载本文时保留本段声明。
- 文章标题:[算法]数据结构算法背包问题解法之递归解法 C语言实现 附代码
- 独立博客:李大仁博客
- 永久链接:http://www.lidaren.com/archives/283
--------------------------------------------------------------------------------------
以上内容由博客自动发布工具自动发布,最终显示内容和效果会与原文内容有所偏差,敬请谅解。
好的,讲一讲递归算法,我提供的算法是使用了有效重量,最大可用价值作为递归参数逐个测试物件的重量和价值,直到找到最佳的侯返回,请注意,这里我设置的条件是只要满足背包可以放就可以,并不是贪心算法,请注意区别。
其他的问题相信大家看完代码注释就可以理解,如果大家还有不明白的地方,欢迎留言,我会尽量解答,最近博主要忙于考试,可能最近比价忙,所以还请见谅
代码如下:
调试环境:GCC ,TC
/* *背包问题之递归解法 *code CG *2008 12 30 */ #include"stdio.h" #include"conio.h" #include"stdlib.h" #define N 5 /*控制输入的元素的个数*/ #define MAX 100 /*背包最大可放重量*/ int result; int select ,selectW ; struct{ int weight; int price; }items ; /*定义物件结构体*/ /* *knapsacks()背包递归算法 *参数:int i 要放入的物件游标位置 int w 已用背包重量 int p 可使用的最大价格 */ void knapsacks(int i, int w, int p){/*背包递归算法*/ int k; if ((w + items[i].weight) < MAX Ibr> selectW[i] = 1; /*重量满足,暂时放入背包*/ if (i < N - i N-br> knapsacks(i + 1, w + items[i].weight, p); } else{ for (k = 0; k < N kbr> select[k] = selectW[k];/*selectW -> select*/ }/*for*/ result = p; }/*else*/ }/*if*/ if (p - items[i].price > result){/*如果物品i不放入背包的情况,还原 */ selectW[i] = 0; if (i < N - br> knapsacks(i + 1, w ,p - items[i].price); } else{ for(k = 0; k < N kselectW -> select*/ select[k] = selectW[k]; } result = p - items[i].price; }/*else*/ }/*if*/ }/*knapsacks*/ int main(){ int i; int w = 0,v = 0; int sumPrice = 0; /*输入计数器*/ int maxWeight = MAX; printf("input W and V :w,vn"); for (i = 0; i < N ibr> scanf("%d,%d",&w,&v); items[i].weight = w; items[i].price = v; printf("W = %d,P = %dn",items[i].weight, items[i].price); selectW[i] = 0; /*清空记录数组*/ select[i] = 0; sumPrice += v; /*记录总价格数据*/ }/*for*/ printf("Max Weight:%dn", maxWeight); result = 0; printf("sumPrice:%dn", sumPrice); knapsacks(0, 0, sumPrice);/*开始背包操作*/ printf("| ID | WT | PR |n"); for (i = 0; i < N ibr> if (select[i]){ printf("|%-4d|%-4d|%-4d|n",i+1,items[i].weight, items[i].price); } }/*for*/ printf("Result:%dn", result); system("PAUSE"); return 0; }
--------------------------------------------------------------------------------------
- 版权声明:
- 如在本页面内无特别说明,本文内容均为[李大仁博客]原创,本文版权归[李大仁博客]所有。
- 欢迎转载,转载请务必在文章页面明显位置提供原文链接并注明出处。欢迎您在转载本文时保留本段声明。
- 文章标题:[算法]数据结构算法背包问题解法之递归解法 C语言实现 附代码
- 独立博客:李大仁博客
- 永久链接:http://www.lidaren.com/archives/283
--------------------------------------------------------------------------------------
以上内容由博客自动发布工具自动发布,最终显示内容和效果会与原文内容有所偏差,敬请谅解。
相关文章推荐
- [算法]简单的背包问题递归解法,C语言实现
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 【数据结构与算法】八皇后问题之递归
- c语言的一结构数据的堆栈实现问题
- [算法]经典算法8皇后(N皇后)问题的解法,C语言实现
- [算法]数据结构中关于货郎担路径问题的常用解法,边界路径问题
- 【数据结构与算法】二叉树 前序 中序 后序 非递归实现 极简
- 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法
- C语言 数据结构中求解迷宫问题实现方法
- 数据结构与算法-实验3-自定义栈,并实现走迷宫问题
- 数据结构之非递归解决0-1背包问题
- 算法:C语言实现 (第1-4部分)基础知识、数据结构……
- 数据结构之贪心算法(背包问题的思考)-(十)
- 数据结构与算法——0-1背包问题
- 数据结构之---C语言实现最短路径之Dijkstra(迪杰斯特拉)算法
- 数据结构与算法——用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 0-1背包问题经典算法(递归实现)
- 数据结构经典算法学习之完全背包问题