next_permutation
STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation。
next_permutation通常用于生成序列的全排列。
函数原型:
bool next_permutation(iterator start,iterator end);
用法
int a[] = {1, 2, 3};
do{
cout << a[0] << " " << a[1] << " " << a[2] << endl;
}while(next_permutation(a, a + 3));
//若当前调用排列已经达到最大字典序,比如321,则函数返回false,否则返回true
//如果函数参数改为(a, a + 2),则可以只对部分长度全排列
next_permutation如何生成下一个全排列?
1.从最右边开始,两两比较相邻的元素,直到找到右边比左边大的一对,左边那个就是将要被替换的;
2.再从最右边开始找比这个元素大的第一个,交换他们两个;
3.交换之后,翻转交换元素的后面的所有元素;
例如:
1 3 4 6 5 2 -> 1 3