原文链接:https://www.yuque.com/cppdev/algo/loeps2
【回溯法】
- 有一类问题,我们不知道它明确的计算法则。而是先进行试探,试探到最终状况,发现不满足问题的要求,则回溯到上一个状态继续试探。这种不断试探和回溯的思想,称为回溯法(Backtrcking)
- 此类问题包括:求最优解、一组解、全部解。例如八皇后问题
【回溯的算法思想】一直往下走,然后再一步步往回走
面对一个问题,每一步有多种做法。先做其中一个做法,然后再此基础上一直做下去,把这个做法的所有可能全部做完,再回来,做第二种做法。
【例子】
- 深度优先搜索
- 求一个序列的幂集
- 八皇后问题
- 涂色问题
【回溯法实质】它的求解过程实质上是先序遍历一棵“状态树”的过程。只不过,这棵树不是遍历前预先建立的,而是隐含在遍历过程中。如果认识到这点,很多问题的递归过程设计也就迎刃而解了。
【回溯与递归的区别】回溯这个算法思想可以由递归这个算法结构来实现
递归 | 回溯 |
---|---|
是一种算法结构 | 是一种算法思想,可以用递 |