枚举法: 循环枚举、排列枚举、子集枚举
排列枚举:假设数组a:a[0] ... a[n-1]
(1)用next_permutation 向后枚举更大的排列
sort(a+0,a+n); //将当前排列设为从小到大排列
do
{
…
}
while(next_permutation(a+0,a+n)); //循环向后枚举
(2)用prev_permutation 向前枚举更小的排列
sort(a+0,a+n,greater<int>()); //将当前排列设为从大到小排列
do
{
…
}
while(prev_permutation(a+0,a+n)); //循环向前枚举
(3)对字符串进行排列枚举,语法稍有不同
string s;
cin>>s;
sort(s.begin(),s.end());
do{
cout<<s<<endl;
}while(next_permutation(s.begin(),s.end()));