一、回溯法思想
贪心算法和动态规划算法在解决最优解的问题上都有原问题具备最优子结构特征,贪心还需要设计最优量度标准。因此贪心和动态规划都不算解决此类问题最常规的方法。但是可以分析此类问题后得出最后结构都是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