回溯:
- 
特点:
- 
递归是向前,回溯就是需要考虑后退,它是一种搜索的方式;
 - 
类似于暴力搜索 + 剪支【提高效率】;
- 减支,是优化的唯一方式;
 
 - 
集合的大小构成了树的宽度,递归的深度构成了树的深度;
for循环树的宽度,递归树的深度【多叉树】;
- 变量【宽度、深度】
 
在每一次的迭代中确定子树的宽度【去重问题】
 
 - 
 - 
经典题型:
- 
组合问题:
- 
组合是没有顺序的,所以一定会传入一个下标,来限制访问已经访问过的【结果去重】
 - 
去重问题:
- 
结果去重【无顺序】:不能访问已经访问过的数据【传入下标【i or i++】,i不能减小】;
 - 
数据去重【输入有重复】:重新排序,
- 当元素可重复的时,传入下标不变【i 】;
 
总结:对同一树枝去重,是元素去重,【通过标记法】
 对同一树层去重,是结果去重;【通过下标i】
 对于唯一解,不需要进行树层的去重【最佳行程】
 
 - 
 
 - 
 - 
排列问题;
 - 
分割,子集;
总结:组合 + 分割问题【收集树的叶子节点】
 子集问题【找到树的所有节点】
 - 
棋盘问题【偏向于深度优先搜索,最佳结果唯一】:
- 最佳行程【解决优先问题】
 - N皇后【对于树宽,树深】
 - 数独【二维递归】
 
 
回溯是暴力解法,模板较为固定【通常会超时】
 - 
 
