在对元素进行字典序组合排列时可以使用STL提供的next_permutation()和prev_permutation()。这里例举两种简单的应用。
POJ 1731 Orders (使用默认比较方法)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
int i,j,k,m,n;
char a[210];
while(gets(a) && a[0])
{
n=strlen(a);
sort(a,a+n); //先排序
printf("%s\n",a);
while(next_permutation(a,a+n)) //返回bool,若无更大的字典序排列返回false
printf("%s\n",a);
}
return 0;
}
POJ 1256 Anagram (需要自定义cmp函数)
#include<algorithm>
#include<iostream>
#include<cstring>
#include<ctype.h>
using namespace std;
int cmp(char a, char b) //自定义cmp函数
{
if(tolower(a)==tolower(b))
return a<b;
return tolower(a)<tolower(b);
}
int main()
{
char s[15];
int i,j,k,m,n;
cin>>n;
cin.ignore();
while(n--)
{
cin.getline(s,15);
k=strlen(s);
sort(s,s+k,cmp);
cout<<s<<endl;
while(next_permutation(s,s+k,cmp))
cout<<s<<endl;
}
return 0;
}