zoukankan      html  css  js  c++  java
  • next_permutation(全排列算法)

     STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation。

    首先解释下全排列,顾名思义,即一组数的全部排列的情况。

    next_permutation 即列出一组数的全部排列情况,不过列出的排列先后顺序有一定的规则,下面就讲讲next_permutation列出的先后规则。。。

    规则

    1.首先从最尾端开始往前寻找两个相邻元素,令第一元素为*i,第二元素为*ii,且满足*i<*ii。

    2.找到这样一组相邻元素后,再从最尾端开始往前检验,找出第一个大于*i的元素,令为*j,将i,j元素对调(swap)。

    3.再将ii之后的所有元素颠倒(reverse)排序。

       举个实例,假设有序列{0,1,2,3,4},下图便是套用上述演算法则,一步一步获得“下一个”排列组合。图中只框出那符合“一元素为*i,第二元素为*ii,且满足*i<*ii ”的相邻两元素,至于寻找适当的j、对调、逆转等操作并未显示出。

    0 1 2 3 4-》0 1 2 4 3-》0 1 3 2 4-》0 1 3 4 2-》0 1 4 2 3-》0 1 4 3 2..........

    刚接触不是说的很清楚,来个简单的应用

    输出(0 1 2 3 4)的全排列

    #include<iostream> 
    #include<algorithm> 
    using namespace std; 
    int main() 

        int ans[5]={0,1,2,3,4}; 
        sort(ans,ans+5);    /* 这个sort可以不用,因为{0 ,1,2,3,4}已经排好序*/ 
        do                             /*注意这步,如果是while循环,则需要提前输出*/ 
        { 
            for(int i=0;i<5;++i) 
                cout<<ans[i]<<" "; 
            cout<<endl; 
        }while(next_permutation(ans,ans+5));  
        return 0; 


     先说这么多,等以后再补叭叭。。。。

  • 相关阅读:
    各个地区2.4G及5G信道一览表 [转]
    nf_conntrack
    串口 属性 设置 termios.h [转载&修改]
    802.3 Logical Link Control 协议相关
    HTTP协议中GET、POST和HEAD的介绍[转载]
    Android Shell、SSH、GCC安装与配置
    mybatis中sql语句总结
    [leedcode 128] Longest Consecutive Sequence
    [leedcode 126] Word Ladder
    [leedcode 125] Valid Palindrome
  • 原文地址:https://www.cnblogs.com/lklk/p/8995644.html
Copyright © 2011-2022 走看看