码迷,mamicode.com
首页 > 其他好文 > 详细

STL next_permutation排列

时间:2016-03-13 22:30:32      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:

概念

全排列的生成算法有很多种,有递归遍例,也有循环移位法等等。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排列

标签:

原文地址:http://www.cnblogs.com/new-comer/p/5273894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!