prev_permutation()和next_permutation()的简单应用
头文件:#include<algorithm> using namespace std;//别忘记这个!!!.
函数名:prev_permutation() //默认升序排列.
bool cmp(int a,int b){
return a>b; //降序就加上这个cmp函数(类似于sort()函数)
} //prev_permutation(a,a+n,cmp)
例题:输入一个不大于9位的数字字符串,按升序输出其所有全排列。
input : 132
output : 123
132
213
231
312
321
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[9];
gets(s);
int n=strlen(s);
sort(s,s+n); //对所有元素升序排序
puts(s); //输出最小的排列 (1.2.3)
while(next_permutation(s,s+n)) //升序输出最小排列之后的所有排列
{
puts(s);
}
return 0;
}
假如题目要求改为降序,可以把代码改成这样:
#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){ //这个cmp()可以共用
return a>b;
}
int main(){
char s[9];
gets(s);
int n=strlen(s);
sort(s,s+n,cmp); //降序排列所有元素
puts(s); //输出的排列,是最大的那种情况(3.2.1)
while(prev_permutation(s,s+n)) //降序输出最大排列之后的所有排列
{
puts(s);
}
return 0;
}
注意理解 next和prev的含义.通过改变限制条件或者cmp(),使用中可以实现两种函数的互相转化,读者自行体会.
ps:新手一枚,理解颇浅,如有错误,请多包涵,欢迎指出,并补充.