C++ 全排列函数 std::next_permutation与std::prev_permutation
来源:互联网 发布:三维软件solidworks 编辑:程序博客网 时间:2024/06/06 11:37
C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序、std::prev_permutation提供降序。
1.std::next_permutation函数原型
template <class BidirectionalIterator>
bool next_permutation (BidirectionalIterator first, BidirectionalIterator last );
template <class BidirectionalIterator, class Compare>
bool next_permutation (BidirectionalIterator first,BidirectionalIterator last, Compare comp);
说明:next_permutation,重新排列范围内的元素[第一,最后一个)返回按照字典序排列的下一个值较大的组合。
返回值:如果有一个更高的排列,它重新排列元素,并返回true;如果这是不可能的(因为它已经在最大可能的排列),它按升序排列重新元素,并返回false。
2.代码实例
1 #include <iostream> 2 #include <algorithm> /// next_permutation, sort 3 using namespace std; 4 int main () { 5 int myints[] = {1,2,3,1}; 6 sort (myints,myints+4); 7 8 do { 9 cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << ' '<< myints[3]<<'\n';10 } while ( next_permutation(myints,myints+4) ); ///获取下一个较大字典序排列11 12 cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] << ' '<< myints[3] <<'\n';13 return 0;14 }
输出:
3.算法实现原理
见:http://hi.baidu.com/bellgrade/item/70b65b8a7ea3c9c398255fd4
算法描述:
1、从尾部开始往前寻找两个相邻的元素
第1个元素i,第2个元素j(从前往后数的),且i<j
2、再从尾往前找第一个大于i的元素k。将i、k对调
3、[j,last)范围的元素置逆(颠倒排列)
- C++ 全排列函数 std::next_permutation与std::prev_permutation
- 全排列函数next_permutation与prev_permutation
- 全排列函数next_permutation,prev_permutation
- stl全排列next_permutation()与prev_permutation()函数用法
- 全排列函数 : next_permutation and prev_permutation
- 全排列函数——next_permutation() & prev_permutation()
- STL全排列函数 next_permutation prev_permutation 及拓展
- next_permutation 与 prev_permutation的用法 (全排列)
- STL之生成全排列:next_permutation & prev_permutation
- STL全排列算法next_permutation和prev_permutation
- 排列函数 prev_permutation和next_permutation的使用
- C++ 求排列函数 next_permutation, prev_permutation
- 全排列 next_permutation()函数
- 全排列与next_permutation
- next_permutation与prev_permutation
- 全排列函数 next_permutation()
- 【全排列】next_permutation函数 【algorithm】
- next_permutation函数(全排列)
- 新浪微博分享多个页面回调不能直接回到调用的Activity问题
- 利用Hadoop和Spark处理用户心跳周期数据
- spring依赖注入
- 离散时间控制系统(2)
- ComboBox->SetCurSel()函数
- C++ 全排列函数 std::next_permutation与std::prev_permutation
- Java删除文件夹内的所有内容
- 第十章——维护索引(6)——查找无用索引
- LeetCode--Merge Two Sorted Lists
- 【Jboss】在jboss上部署web应用
- kafka 配置部署
- Storm原理详解
- bootstrap笔记
- 《剑指Offer》读书笔记02:替换空格