第13课:排列枚举

潘CSP100班

2024-07-16 9:59:44
2024-08-15 12:36:24

信息与公告

1、用permutation枚举排列

(1) 对于数组a(假设从下标0开始)
  可用next_permutation(a+0, a+n)向后取一个排列
  可用prev_permutation(a+0, a+n)向前取一个排列
(2) 对于字符串s:
  next_permutation(s.begin(), s.end());
  prev_permutation(s.begin(), s.end());

2、枚举全排列的方法

(1)用do{ ... }while(next_permutation(a+0,a+n)); 从小到大向后枚举排列,
(2)用do{ ... }while(prev_permutation(a+0,a+n)); 从大到小向前枚举排列

3、用sort设置数组a为最小排列和最大排列

sort(a+0,a+n);       //最小排列
sort(a+0,a+n,greater<int>());   //最大排列

4、【例题】从小到大向后枚举数组a的所有排列

sort(a+0,a+n);  //设置当前排列为最小排列
do  
{   
   for (int i = 0; i <= n-1; i++) {   //输出当前排列
      cout<<a[i];
   }
   cout<<endl;
} while (next_permutation(a + 0, a + n));  //向后枚举后面的排列