枚举所有排列的另一个方法是从字典序最小排列开始,不停调用“求下一个排列”的过 程。
全排列的个数A(N,N)=(N)(N-1)…*2*1=N!
下一个排列:通常按照升序顺序(字典序)获得下一个排列
stl
next_permutation找下一个排列的算法
如果一个数组arr[]中存在重复元素,next_permutation是否工作正常呢?
STL使用“!(*i < *j)”进行判断大小,若相等则继续寻找,这样就会跳过重复的元素,进而跳过重复的全排列(如:1,2,2; 和1,2,2)。
返回值?
当返回为1时,表示找到了下一全排列;返回0时,表示无下一全排列。注意,如果从begin到end为降序,则表明全排列结束。
原理?
一个目的,不断地找最接近这个排列的下个排列,直到全部降序为止
template<calss BidrectionalIterator>
bool next_permutation(BidrectionalIterator first,BidrectionalIterator