next_permutation
来源:互联网 发布:京东大数据认证考试 编辑:程序博客网 时间:2024/06/05 02:34
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>下面是以前的笔记
与之完全相反的函数还有prev_permutation
(1)int 类型的next_permutation
int main(){
int a[3];
a[0]=1;
a[1]=2;
a[2]=3;
do{
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}while (next_permutation(a,a+3));//参数3指的是要进行排列的长度//如果存在a之后的排列,就返回true。如果a是最后一个排列没有后继,返回false,每执行一次,a就变成它的后继
}
输出:123
132
213
231
312
321
如果改成
while(next_permutation(a,a+2));
则输出:123
213
只对前两个元素进行字典排序显然,如果改成while(next_permutation(a,a+1));
则只输出:123
若排列本来就是最大的了没有后继,则next_permutation执行后,会对排列进行字典升序排序,
相当于循环intlist[3]={3,2,1};
next_permutation(list,list+3);
cout<<list[0]<<" "<<list[1]<<" "<<list[2]<<endl;//输出: 1 2 3
(2)char 类型的next_permutation
int main(){
char ch[205];
cin >> ch;
sort(ch, ch +strlen(ch) );//该语句对输入的数组进行字典升序排序。如输入9874563102 cout<<ch;
将输出0123456789,这样就能输出全排列了
char *first = ch;
char *last = ch + strlen(ch);
do {
cout<< ch << endl;
}while(next_permutation(first, last));
return0;}//这样就不必事先知道ch的大小了,是把整个ch字符串全都进行排序//若采用 while(next_permutation(ch,ch+5));
如果只输入1562,就会产生错误,因为ch中第五个元素指向未知//若要整个字符串进行排序,
参数5指的是数组的长度,不含结束符
(3)string 类型的next_permutation
int main(){
string line;
while(cin>>line && line!="#"){
if(next_permutation(line.begin(),line.end()))//从当前输入位置开始
cout<<line<<endl;
elsecout<<"Nosuccesor\n";}
}
int main(){
string line;
while(cin>>line && line!="#"){
sort(line.begin(),line.end());//全排列
cout<<line<<endl;
while(next_permutation(line.begin(),line.end()))
cout<<line<<endl;
}}
next_permutation 自定义比较函数
#include<iostream>//poj 1256 Anagram
#include<string>
#include<algorithm>
usingnamespacestd;
int cmp(char a,char b) //'A'<'a'<'B'<'b'<...<'Z'<'z'.
{if(tolower(a)!=tolower(b))
returntolower(a)<tolower(b);
elsereturn a<b;
}
int main(){
char ch[20];
int n;
cin>>n;
while(n--){
scanf("%s",ch);
sort(ch,ch+strlen(ch),cmp);
do{
printf("%s\n",ch);
}while(next_permutation(ch,ch+strlen(ch),cmp));}
return0;}
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- next_permutation
- 让系统管理监控逼格高一点的技巧——从零开始玩转JMX
- 二分查找
- 【Scikit-Learn 中文文档】概率校准
- Lintcode 382. 三角形计数
- freemarker
- next_permutation
- 栈的应用 10进制的转换
- 四种解析xml文档方法的详解(优缺点比较+实例)
- 05-定位不到元素问题
- RabbitMQ之消息持久化(队列持久化、消息持久化)
- Filter过滤器总结(一)
- Java回调机制解读
- [模板]
- 【Scikit-Learn 中文文档】神经网络模块(监督的)- 监督学习