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; 


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

  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/lklk/p/8995644.html
Copyright © 2011-2022 走看看