基本问题:对自然数序列P={1,2,3,...,n}按字典序进行全排列。比如序列{1,2,3}字典序全排列为{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。
基本思路:用数组A来存储排列结果,基本思想是递归地向数组A[cur]中放元素P[i],直到cur==n时到达递归的边界从而输出结果。进行递归的条件是新放入的元素未在数组A中,此条件是为了避免重复放入元素。由于序列P里的元素是从1开始的连续正整数,本身是按字典序排列的,所以当从左至右地从序列P里取元素,可以满足最后排列的结果就是按字典序排列的。具体的递归过程见下图。
上图是一个树,树叶为解,即一个排列。从左至右,解按字典序出现。此树展示了逐步生成完整解的过程,这个过程具有横向循环,纵向递归的特点。横向循环表示每一步有多种选择,纵向递归表示每一步操作