【算法系列05】回溯法

回溯法是一种通过树形结构列举所有可能解并使用约束函数和限界函数进行剪枝的优化穷举方法。本文介绍了回溯法的基本思想,并探讨了其在n-皇后问题和0/1背包问题中的应用。
摘要由CSDN通过智能技术生成

一、回溯法思想

贪心算法和动态规划算法在解决最优解的问题上都有原问题具备最优子结构特征,贪心还需要设计最优量度标准。因此贪心和动态规划都不算解决此类问题最常规的方法。但是可以分析此类问题后得出最后结构都是n-元组的解集。因此我们可以用穷举法把所有解集都列出来,但是明显穷举法时间复杂度和空间复杂度一定很大,因此需要用到优化方法。

列出所有解集:利用树的结构。
优化:用约束函数、限界函数进行剪枝。
结果:用深度遍历得到最优解。

二、应用

1.n-皇后问题

2.0/1背包问题

#include<iostream>  
using namespace std;  
int n,c,bestp;//物品个数,背包容量,最大价值  
int p[10000],w[10000],x[10000],bestx[10000];//物品的价值,物品的重量,物品的选中情况  

//cp当前已放入的总价值,cw当前已放入的总重量 
void backtrack(int i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值