C++ 全排列函数 std::next_permutation与std::prev_permutation
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.代码实例
#include <iostream>
#include <algorithm> /// next_permutation, sort
using namespace std;
int main () {
int myints[] = {,,,};
sort (myints,myints+); do {
cout << myints[] << ' ' << myints[] << ' ' << myints[] << ' '<< myints[]<<'\n';
} while ( next_permutation(myints,myints+) ); ///获取下一个较大字典序排列 cout << "After loop: " << myints[] << ' ' << myints[] << ' ' << myints[] << ' '<< myints[] <<'\n';
return ;
}
输出:
3.算法实现原理
见:http://hi.baidu.com/bellgrade/item/70b65b8a7ea3c9c398255fd4
算法描述:
1、从尾部开始往前寻找两个相邻的元素
第1个元素i,第2个元素j(从前往后数的),且i<j
2、再从尾往前找第一个大于i的元素k。将i、k对调
3、[j,last)范围的元素置逆(颠倒排列)
最新文章
- JavaScript 闭包深入浅出
- 移动销售端app的需求分析
- android 音乐播放器简单实现
- jQuery Form 表单提交插件-----formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的 应用
- liveusb-creator
- tomcat 解析(一)-文件解析
- threaded模式下,比prefork模式要省资源
- 依赖注入及AOP简述(五)——依赖注入的方式 .
- 离职了,在家温故而知新----1 设计模式 &; 开头
- Java连接数据库完整代码 查找和插入
- MVC3/4/5/6 布局页及Razor语法及Route路由配置
- 使用HTML5拍照
- day21双下方法,源码相关,异常处理
- python学习日记(内置函数补充)
- C#HTTP请求之POST请求和GET请求
- EXAMPLE FOR PEEWEE 多姿势使用 PEEWEE
- vue 自学笔记(6) axios的使用
- VUE基于ElementUI搭建的简易单页后台
- redmine生产环境搭建
- 2018-2019-1 20189215 《Linux内核原理与分析》第八周作业
热门文章
- ES6-const注意
- PAGELATCH_EX Contention on 2:1:103
- [leetcode DP]62.Unique Paths
- CSS基础-DAY2
- 01-学前入门.Net两种交换模式
- codevs 5971 打击犯罪
- 【推导】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) B. Mystical Mosaic
- MySQL规约(阿里巴巴)
- mysql关联查询和联合查询
- dwr.jar简介