当前位置:   article > 正文

STL中全排列的用法_stl自带全排列怎么用

stl自带全排列怎么用

计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。都包含在头文件 #include<algorithm> 里面。

假设我们想 求 1 到 n 的全排列代码如下:

  1. #include <stdio.h>
  2. #include <algorithm>
  3. using namespace std;
  4. int main(){
  5. int n;
  6. while(scanf("%d",&n)&&n){
  7. int a[1000];
  8. for(int i=0;i<n;i++){
  9. scanf("%d",&a[i]);
  10. }
  11. sort(a,a+n);
  12. do{
  13. for(int i=0;i<n;i++)
  14. printf("%d ",a[i]);
  15. printf("\n");
  16. }while(next_permutation(a,a+n));
  17. }
  18. return 0;
  19. }

我们看下测试样例:

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. int num[3]={1,2,3};
  7. do
  8. {
  9. cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
  10. }while(next_permutation(num,num+3));
  11. return 0;
  12. }

测试结果如下:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2

3 2 1

但是如果我们将序列变一下的话,不是按照递增序列排的话,那么输出就会少很多,比如:

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. int num[3]={2,1,3};
  7. do
  8. {
  9. cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
  10. }while(next_permutation(num,num+3));
  11. return 0;
  12. }

测试结果如下:

2 1 3
2 3 1
3 1 2

3 2 1


同样,prev_permutation(start,end)函数是和next_permutation(start,end)用法相同。








声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/795269
推荐阅读
相关标签
  

闽ICP备14008679号