0-1背包问题(回朔法搜索子集树)
来源:互联网 发布:2016尚学堂云计算 编辑:程序博客网 时间:2024/04/30 03:14
将解空间用一颗完全二叉树表示,用回朔法搜索这颗树:
解法1:建立了一个完全二叉树(称子集树),结点中带有需要的信息,深度优先遍历这颗二叉树(递归方法),
找到最优解。
困难:如何记录当前的路径?
解决方案:1、设置一个栈
2、在递归调用“深度优先遍历左子树”之前,将0压入栈;在递归调用“深度优先遍历右子树”之前,将1压入栈
3、当递归调用出来后,将栈顶元素弹出
这样到了页结点的时候,栈中的元素就是一个解
解法2:(巧妙)不需要建立树的代码,只需要用一个数组存放访问路径,核心代码如下:
void Backtrack(int t)
...{
if(t>n) Output();
else
...{
for (int i=0;i<=1;i++)
...{
path[i]与path[t]交换;
if (Constraint()&&Bound(t)) Backtrack(t+1);
}
}
}
...{
if(t>n) Output();
else
...{
for (int i=0;i<=1;i++)
...{
path[i]与path[t]交换;
if (Constraint()&&Bound(t)) Backtrack(t+1);
}
}
}
递归到最后一层时,数组path中的值(0,1序列)就是这一趟的解
- 0-1背包问题(回朔法搜索子集树)
- 子集和问题(背包)
- 算法设计与分析实验四回溯法+子集树+最大团+0-1背包问题求解
- 简单背包问题(实际上是子集问题)
- 0-1背包问题(dfs记忆化搜索写法)
- 暴力搜索解0-1背包问题
- 暴力搜索解0-1背包问题
- 背包问题(二):0-1背包
- (背包一)0-1背包问题
- 背包问题(0/1背包,完全背包)
- 背包问题(深度优先搜索解法)
- 回溯法(子集树)----- 装载问题
- 树:深度优先搜索、广度优先搜索、背包问题
- poj 1775 01背包(子集和)
- 【动态规划】从子集和问题到背包问题
- 0-1背包问题、背包问题(贪心算法)
- 贪心法--背包问题(不是0/1背包问题)
- 【转】背包问题总结(0-1背包+完全背包+多重背包)
- Java需要达到的30个目标
- ACM UVa 算法题100, 101, 103, 104, 112, 10405解法
- http://www.mm51a.com/
- CHM 文件无法显示内容的问题
- 在 Eclipse 中运行带参数的 Java 程序
- 0-1背包问题(回朔法搜索子集树)
- 兼容 IE、 FireFox 的 javascript 日历控件
- IP PBX 简介
- 成功:简单事重复做
- 061201
- SQL注入天书
- Solaris 10下架构MySQL + Apache + php 系统
- NGN技术综述
- 我日了那些发广告的!