第14课:枚举法( 排列枚举)

潘CSP十点班

2023-12-09 9:47:43
2023-12-28 16:47:43

信息与公告

枚举法: 循环枚举、排列枚举、子集枚举
排列枚举:假设数组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()));