以深度优先的方式系统地搜索问题的解的方法称为回溯法。
可以系统地搜索一个问题的所有解或任意解。
回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。
回溯法的基本思想
在生成解空间树时,定义以下几个相关概念:
1.活结点:
如果已生成一个结点而它的所有儿子结点还没有全部生成,则这个结点叫做活结点。
2.扩展结点:
当前正在生成其儿子结点的活结点叫扩展结点(正扩展的结点)。
3.死结点:
不能再进一步扩展或者其儿子结点已全部生成的结点就是死结点。
回溯从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。
开始结点(根结点)成为第一个活结点,同时成为当前的扩展结点。
在当前的扩展结点,搜索向深度方向进入一个新的结点。这个新结点成为一个新的活结点,并成为当前的扩展结点。
若在当前扩展结点处不能再向深度方向移动,则当前的扩展结点成为死结点,即该活结点成为死结点。
此时回溯到最近的一个活结点处,并使得这个活结点成为当前的扩展结点。
回溯法以这样的方式递归搜索整个解空间(树),直至满足中止条件。
在回溯法搜索解空间树时,通常采用两种策略(剪枝函数)避免无效搜索以提高回溯法的搜索效率:
用约束函数在扩展结点处剪去不满足约束条件的子树;
用限界函数剪去不能得到最优解的子树。