• STL next_permutation排列


    概念

    全排列的生成算法有很多种,有递归遍例,也有循环移位法等等。C++/STL中定义的next_permutation和prev_permutation函数则是非常灵活且高效的一种方法,它被广泛的应用于为指定序列生成不同的排列。本文将详细的介绍prev_permutation函数的内部算法。

    按照STL文档的描述,next_permutation函数将按字母表顺序生成给定序列的下一个较大的序列,直到整个序列为减序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的序列。二者原理相同,仅遍例顺序相反,这里仅以next_permutation为例介绍算法。

    下文内容都基于一个假设,即序列中不存在相同元素。对序列大小的比较做出定义:两个长度相同的序列,从两者的第一个元素开始向后比较,直到出现一个不同元素(也可能就是第它们的第一个元素),该元素较大的序列为大,反之序列为小;若一直到最后一个元素都相同,那么两个序列相等。

    设当前序列为pn,下一个较大的序列为pn+1,那么不存在pm,使得pn < pm < pn+1

    代码(包含在头文件algorithm中)

    int main()
    {
    string s = "223344AA";
    do
    {
    cout<<s<<endl;
    for(int i = 0; i < s.length(); i++)
    {
    cout<<s[i];
    }
    }while(next_permutation(s.begin(),s.end())); //s.begin()开始排序的位置,s.end()排序结束的地址or可以写成:while(next_permutation(s.begin()+3,s.begin()+5));  
    return 0;
    }

  • 相关阅读:
    ural 1146. Maximum Sum(动态规划)
    ural 1119. Metro(动态规划)
    ural 1013. K-based Numbers. Version 3(动态规划)
    Floyd算法
    杭电21题 Palindrome
    杭电20题 Human Gene Functions
    杭电15题 The Cow Lexicon
    杭电三部曲一、基本算法;19题 Cow Bowling
    杭电1002 Etaoin Shrdlu
    Qt 学习之路 2(37):文本文件读写
  • 原文地址:https://www.cnblogs.com/new-comer/p/5273894.html
Copyright © 2020-2023  润新知