• C++中全排列函数next_permutation 用法


    今天蓝桥杯刷题时发现一道字符串排序问题,突然想起next_permutation()函数和prev_permutation()函数。

    就想写下next_permutation()的用法

    next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,严格来讲,就是对于当前序列pn,他的下一个序列pn+1满足:不存在另外的序列pm,使pn<pm<pn+1.

    对于next_permutation函数,其函数原型为:

         #include <algorithm>

         bool next_permutation(iterator start,iterator end)

    当当前序列不存在下一个排列时,函数返回false,否则返回true

     而prev_permutation函数就要反过来了,当上一个排序不存在时返回false,否则返回true

    #include <iostream>  
    #include <algorithm>  
    using namespace std;  
    int main()  
    {  
        int num[5]={1,2,3};  
        do  
        {  
            cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;  
        }while(next_permutation(num,num+3));  
        return 0;  
    }  
    

     

    当我们把while(next_permutation(num,num+3))中的3改为2时,输出就变为了:

    运行以后可以发现,next_permutation(num,num+n)函数是对数组num中的前n个元素进行全排列,同时并改变num数组的值。

    另外,需要强调的是,next_permutation()在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数。

    另外阅读朋友博客发现:

    next_permutation(node,node+n,cmp)可以对结构体num按照自定义的排序方式cmp进行排序。也可以对字符排序啊。。。

    资料借鉴:https://m.xp.cn/b.php/90111.html

  • 相关阅读:
    26 转义符 re模块 方法 random模块 collection模块的Counter方法
    25 正则表达式
    24 from 模块 import 名字
    24 from 模块 import 名字
    24 from 模块 import 名字
    23 析构方法 items系列 hash方法 eq方法
    21 isinstance issubclass 反射 _str_ _new_ _len_ _call_
    20 属性, 类方法, 静态方法. python2与python3的区别.
    python(1)
    python之字符串格式化
  • 原文地址:https://www.cnblogs.com/RioTian/p/12198344.html
Copyright © 2020-2023  润新知