回溯法
回溯法是一种类似于分治的设计技术,用来求解最优化问题并寻求可行方案。
代码链接
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
在回溯法中,可以把所有的路径看作一棵树,在这棵树中,结点有三种:
- 活结点:子结点还不确定的结点;
- 扩展结点:所有子结点未全部确定的结点;
- 死结点:所有子结点都已确定的结点。
下面是回溯法的经典例子:N皇后问题。
N皇后问题
假定一个N×N大小的棋盘,有N个皇后,要把N个皇后放置在棋盘上,且每个皇后上下左右和对角线都没有其他皇后,该如何放置呢。
假设N=4,下图为4皇后的问题生成树:
在该树列举了所有可能的摆放情况,如果一个一个遍历查找满足条件的情况,时间复杂度为N^N^,是不现实的,可以从根节点开始,往下