next_permutation的函数声明:#include <algorithm>
bool next_permutation( iterator start, iterator end);
next_permutation函数的返回值是布尔类型,在STL中还有perv_permutation()函数
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string str;
cin >> str;
sort(str.begin(),str.end());
while (next_permutation(str.begin(), str.end()))
cout << str << endl;
return 0;
}
next_permutation()函数功能是输出所有比当前排列大的排列,顺序是从小到大。
而prev_permutation()函数功能是输出所有比当前排列小的排列,顺序是从大到小。
next_permutation函数的原理如下:
在当前序列中,从尾端向前寻找两个相邻元素,前一个记为*i,后一个记为*t,并且满足*i < *t。然后再从尾端
寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第t个元素之后(包括t)的所有元
素颠倒排序,即求出下一个序列了。
代码:
template<class Iterator>
bool next_permutation(Iterator first,Iterator last)
{
if(first == last)
return false;
Iterator i = first;
++i;
if(i == last)
return false;
i = last;
--i;
while(1)
{
Iterator t = i;
--i;
if(*i < *t)
{
Iterator j = last;
while(!(*i < *--j));
iter_swap(i,j);
reverse(t,last);
return true;
}
if(i == first)
{
reverse(first,last);
return false;
}
}
}