作者:​孙宇洪​


题目:http://poj.org/problem?id=1731

题意:给你一个字符串,先让你输出排序后的字符串,然后再依次输出排序后的字符串的全排列。

分析:如果这道题是用C写的话,我们就要写一个递归函数,不过还好这道题的数据量不大(我试过,给你的字符串的长度不超过9),如果字符串的长度大于20的话,那么写递归函数就显然会失败。现在让我来介绍一下这个函数的应用:

先看一下这个函数的参数:
next_permutation(first,last,comp);//first为首迭代器,last为末迭代器,comp为比较函数

它的功能是:求出一个容器的下一排列,如果没有下一排列,则返回0。
有很多人可能不知道next_permutation函数中有comp比较函数,这个我会在下一篇博文中讲述。

prev_permutation(first,last,comp);//first为首迭代器,last为末迭代器,comp为比较函数
它的参数和next_permutation完全相同,它的功能是:求出一个容器的上一排列,如果没有上一排列,则返回0

现在贴一下我的代码:

#include <iostream>

#include <string>

#include <algorithm>

using namespace std;

int main()

{




string str;




while(cin>>str)




{




sort(str.begin(),str.end());




cout<<str<<endl;




while(next_permutation(str.begin(),str.end()))




cout<<str<<endl;




}




return 0;

}



关于这两个函数的应用,还有例题:poj1256 poj 1833 poj1731(本文) poj3187 poj1270(图论+next_permutation的应用)