2 条题解

  • 4
    @ 2024-1-24 12:49:13
    ● 引言:
    STL

    STL(Standard Template Library),即 标准模板库,是一个具有工业强度的、高效的C++程序库,内部包含了许多常用算法模板。

    STL 全排列函数 next_permutation()

    包含于头文件<algorithm>,将数字类型数据按照字典序全排列。

    基本格式:

    int a[n];
    do{
        //代码块
    } while(next_permutation(a, a+n));
    

    WARNING:

    1. next_permutation() 函数作用范围:自数组当前字典序始依次增大至最大字典序

      eg.

      int a[3]={1, 0, 2};
      do{
           for(int i=0; i<n; i++) printf("%d ", a[i]);
           printf("\n");
      } while(next_permutation(a, a+3));
      

      输出:

      1 0 2

      1 2 0

      2 0 1

      2 1 0

      int a[3]={1, 0, 2};
      sort(a, a+3);
      do{
          for(int i=0; i<n; i++) printf("%d ", a[i]);
          printf("\n");
      } while(next_permutation(a, a+3));
      

      输出:

      0 1 2

      0 2 1

      1 0 2

      1 2 0

      2 0 1

      2 1 0

    2. next_permutation() 属于原地算法,会直接更新数组的值。如果“下一个排列”存在,函数返回true并执行排列,否则返回false

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int main(){
        char s[10];
        scanf("%s", s);
    
        int const n=strlen(s);
    
        int t[10];
        for(int i=0; i<n; i++) t[i] = i;
    
        do{
            for(int i=0; i<n; i++) printf("%c ", s[t[i]]);
            printf("\n");
        } while(next_permutation(t, t+n));
    
        return 0;
    }
    

    信息

    ID
    419
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    87
    已通过
    36
    上传者