STL next_permutation排列

Posted Day_to_Day

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL next_permutation排列相关的知识,希望对你有一定的参考价值。

概念

全排列的生成算法有很多种,有递归遍例,也有循环移位法等等。C++/STL中定义的next_permutation和prev_permutation函数则是非常灵活且高效的一种方法,它被广泛的应用于为指定序列生成不同的排列。本文将详细的介绍prev_permutation函数的内部算法。

按照STL文档的描述,next_permutation函数将按字母表顺序生成给定序列的下一个较大的序列,直到整个序列为减序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的序列。二者原理相同,仅遍例顺序相反,这里仅以next_permutation为例介绍算法。

下文内容都基于一个假设,即序列中不存在相同元素。对序列大小的比较做出定义:两个长度相同的序列,从两者的第一个元素开始向后比较,直到出现一个不同元素(也可能就是第它们的第一个元素),该元素较大的序列为大,反之序列为小;若一直到最后一个元素都相同,那么两个序列相等。

设当前序列为pn,下一个较大的序列为pn+1,那么不存在pm,使得pn < pm < pn+1

代码(包含在头文件algorithm中)

int main()
{
string s = "223344AA";
do
{
cout<<s<<endl;
for(int i = 0; i < s.length(); i++)
{
cout<<s[i];
}
}while(next_permutation(s.begin(),s.end())); //s.begin()开始排序的位置,s.end()排序结束的地址or可以写成:while(next_permutation(s.begin()+3,s.begin()+5));  
return 0;
}

以上是关于STL next_permutation排列的主要内容,如果未能解决你的问题,请参考以下文章

STL::next_permutation();

STL next_permutation 全排列

STL next_permutation 算法原理和自行实现

STL next_permutation 算法原理和自行实现

POJ 1833 排列STL/next_permutation

C++STL的next_permutation