zoukankan      html  css  js  c++  java
  • 排列组合

    这两个函数都包含在algorithm库中。STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation。

    一、函数原型

    首先我们来看看这两个函数的函数原型:

    • next_permutation:
    1 template< class BidirIt >bool next_permutation( BidirIt first, BidirIt last );
    2 template< class BidirIt, class Compare >bool next_permutation( BidirIt first, BidirIt last, Compare comp );
    • prev_permutation:
    1 template< class BidirIt >bool prev_permutation( BidirIt first, BidirIt last);
    2 template< class BidirIt, class Compare >bool prev_permutation( BidirIt first, BidirIt last, Compare comp);

    1.参数

    first,end ——重新排序的元素范围

    comp —— 自定义比较函数

    顾名思义,next_permutation就是求下一个排列组合,而prev_permutation就是求上一个排列组合。首先我们必须了解什么是“下一个”排列组合,什么是“前一个”排列组合。考虑由三个字符所组成的序列{a,b,c}。

    那么按照字典序排升序他们一共有下面这几种排列方式:

    • abc
    • acb
    • bac
    • bca
    • cab
    • cba

    如果给定排列方式P,令P为{acb},那么next_permutation即求P+1也就是{bac},prev_permutation也就是求P-1即为{abc}。当然也可以自定义谓词函数进行自定义的“下一个排列组合”。

    二、代码演示

    下面是示范代码:

    #include <algorithm>
    using namespace std;
    
    int main() {
        int a[] = { 1,2,3 };
        do {
            for (int i = 0; i < 3; i++) cout << a[i] << ' ';
            cout << endl;
        } while (next_permutation(a, a + 3));
    
        cout << endl;
        do {
            for (int i = 0; i < 3; i++) cout << a[i] << ' ';
            cout << endl;
        } while (prev_permutation(a, a + 3));
        return 0;
    }

    预计上面代码的运行结果应该是输出两组1,2,3的排列组合方式,共12行,但实际运行结果如下:

    Why?

    我们试着输出第一个循环后a数组的排列方式,结果会得到1 2 3,这是因为当next_permutation去找下一个排列组合P+1,找到则排列为下一个排列组合返回true,否则数组变成字典序最小的排列组合(即为重置排列)并返回false,prev_permutation也同理。

    https://www.cnblogs.com/xenny/p/10192983.html

  • 相关阅读:
    最原始不用代理服务器的设置
    实现开启和关闭android移动网络(转)
    Android快捷键
    如何终止java线程
    电脑上安装的android虚拟机,能进行基站定位和GPS定位吗?要怎么做才能定位?(转)
    C语言标量类型(转)
    Android种 adb是什么(转)
    ☆☆在Eclipse中编译NDK的so文件(普通安卓项目转换为NDK项目的设定)
    androidSDK也要配置环境变量(转)
    Android控件系列之RadioButton&RadioGroup(转)
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/3608888.html
Copyright © 2011-2022 走看看