全排列的生成算法(六)——回溯法
回溯法通常是构造一颗生成树。以3个元素为例;树的节点数据可取值是1、2、3。如果某个节点为0,则表示尚未取值。
初始状态是(0,0,0),第1个元素值可以分别挑选1,2,3,因此扩展出3个子结点。用相同方法找出这些结点的第2个元素的可能值,如此反复进行,一旦出现新结点的3个数据全非零,那就找到了一种全排列方案。当尝试了所有可能方案,即获得了问题的解答。
回溯法有非递归和递归两种形式。递归形式的程序代码比较简洁,但是递归会带来运行时间和内存的额外消耗,效率较低。非递归形式的回溯法效率要高一些,但程序代码比较复杂。
//