程序设计中,有相当一类求一组解、求全部解或求最优解的问题,例如八皇后,不是根据某种确定的计算法则,而是利用试探和回溯(Backtracking)的搜索技术求解。
回溯法也是递归过程的一种重要方法,其求解过程实质上是一个先序遍历“状态树”的过程,只不过这棵树不是遍历前预先建立的,而是隐含在遍历过程中。
状态树有时候可能是一棵满二(多)叉树,树中每个叶子节点的状态都是求解过程中可能出现的状态(问题的解),当然很多时候,求解过程中的状态树不是一棵满二(多)叉树,当试探过程中出现的状态和问题所求解产生矛盾时,就不再继续试探下去,这时出现的叶子节点就不是问题解的终结状态。这类问题可以看作是约束条件下进行先序遍历。并在遍历的过程中剪去那些不满足条件的分支(剪枝)。