STL::next_permutation();

next_permutation()可以按字典序生成所给区间的全排列。

在STL中,除了next_permutation()外,还有一个函数prev_permutation(),两者都是用来计算排列组合的函数。前者是求出下一个排列组合,而后者是求出上一个排列组合。所谓“下一个”和“上一个”,书中举了一个简单的例子:对序列 {a, b, c},每一个元素都比后面的小,按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。

next_permutation()和prev_permutation()包含在头文件#include <algorithm>中。

注意:虽然最后一个排列没有下一个排列,用next_permutation()会返回false,但是使用了这个方法后,序列会变成字典序列的第一个,如cba变成abc。prev_permutation同理。

用法:

这里我们举例0,1,2,3,4的全排列。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int main(){
 5     int a[5]={0,1,2,3,4};
 6     int ans=0;
 7     while(ans<20){
 8         next_permutation(a,a+5);
 9         for(int i=0;i<5;i++){
10             cout<<a[i];
11         }
12         cout<<endl;
13         ans++;
14     }
15     return 0;
16 }

输出结果:

对于prev_permutation():

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int main(){
 5     int a[5]={0,1,2,3,4};
 6     int ans=0;
 7     while(ans<20){
 8         prev_permutation(a,a+5);
 9         for(int i=0;i<5;i++){
10             cout<<a[i];
11         }
12         cout<<endl;
13         ans++;
14     }
15     return 0;
16 }

输出结果:

例题参考:POJ-2718

时间: 2024-12-06 12:53:49

STL::next_permutation();的相关文章

C++提高5 STL算法 :查找,统计,排序,拷贝,替换,算术,集合 |STL 案例:学校演讲比赛介绍

[本文谢绝转载] <大纲> STL 算法 查找算法 adjacent_find()查找容器中重复元素的首地址 distance()根据迭代器,返回元素的下标 binary_search()二分查找:在有序的序列 find   查找函数 find_if 自定义查找函数 统计算法 count 返回容器中相同元素的个数 cout_if 统计大于3的元素个数 排序算法 marge()对两个有序容器组合到另一个容器 sort 自定义排序 random_shuffle 随机洗牌 基本数据类型 random

STL之一:字符串用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8539471 字符串是程序设计中最复杂的变成内容之一.STL string类提供了强大的功能,使得许多繁琐的编程内容用简单的语句就可完成.string字符串类减少了C语言编程中三种最常见且最具破坏性的错误:超越数组边界:通过违背初始化或被赋以错误值的指针来访问数组元素:以及在释放了某一数组原先所分配的存储单元后仍保留了“悬挂”指针. string 函数列表 函数名 描述 begin

android:启动服务;广播(最高优先窃听信息)并转发给别人

3.1.Service服务 Service类似Activity,实际上就是一个没有界面的Activity,而且默认不会随着程序关闭而关闭. 开发人员自定义的服务类一般用来完成一些安全软件的一些监听功能,以及消息提示,流氓软件的功能. 系统服务则是通过类似getSystemService()的方法来取得系统的一些服务管理类(XxxxManager),来调用系统处理好的功能完成自己需要的操作,例如:电话监听,连接状态的判断等. 如果想自己编写一个服务类,可以建立一个类,继承Service,并覆写相应

css3背景颜色渐变属性 兼容性测试基础环境为:windows系统;IE6.0+, Firefox4.0+, Chrome4.0+, Safari4.0+, Opera15.0+

css3背景颜色渐变属性 兼容性测试基础环境为:windows系统:IE6.0+, Firefox4.0+, Chrome4.0+, Safari4.0+, Opera15.0+ 语法: <linear-gradient>:linear-gradient([ <point>,]? <color-stop>[, <color-stop>]+); <point>:[ left | right ]? [ top | bottom ]? || <a

题目:命令chkconfig;开机自启动服务

chkconfig  chkconfig --list 查看所有服务对应的运行级别 过滤3级别开机自动启动的服务 [[email protected] ~]# chkconfig --list | grep "3:on" 查看某个服务开机自启级别,例如查看 iptables [[email protected] ~]# chkconfig --list iptables 开机自启动服务:sshd 一.更改配置文件 将启动命令放入  /etc/rc.local 例如配置sshd服务开机自

第80讲:List的泛型分析以及::类和Nil对象

今天我们学习一下scala中的列表,List. 通过源码,我们可以发现,List类型是协变的,所以我们可以把Int类型的List赋值给Any型的List. 我们可以看到,List定义下有3个比较重要的方法,isEmpty,head,tail isEmpty,判断列表是否为空:head为List的第一个元素:tail为list除第一个元素的其它元素列表. 另外,List的两个非常重要的继承者,它们就是::和Nil. ::列表连接. Nil为空列表,所以head,tail操作都会抛出异常. 分享下更

QT QObject::connect函数的学习

从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: [cpp] view plaincopy static bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType = #ifdef qdoc Qt::AutoConnection #else #ifdef QT3_S

STL algorithm算法next_permutation,prev_permutation(39)

next_permutation原型: std::next_permutation default (1) template <class BidirectionalIterator> bool next_permutation (BidirectionalIterator first, BidirectionalIterator last); custom (2) template <class BidirectionalIterator, class Compare> bool

伪元素::before和::after的详细介绍

㈠什么是伪元素? 不同的解释: ⑴伪元素是创造关于文档语言能够指定的文档树之外的抽象.例如文档语言不能提供访问元素内容第一字或者第一行的机制.伪元素允许设计师引用它们,否则这是难以办到的.伪元素还提供样式设计师给在源文档中不存在的内容分配样式(例如::before和:after能够访问产生的内容). ⑵CSS 在渲染文档的时候,伪元素可以通过 css 给 HTML 添加一个元素(叫标签也行),这个元素在文档树中是找不到的.伪元素被当做 CSS 的样式来进行展现,用法和普通的元素用法是一样的. ⑶

scala中List的泛型分析以及::类和Nil对象

学习了scala中List的泛型分析以及::类和Nil对象,List是对scala的类型系统的一个非常好的使用,进一步巩固List的知识对于理解scala的类型系统是非常有价值的.本讲主要分析了List的泛型.::类和Nil对象. List有两个非常重要的子类,一个是::,一个是Nil,这两个子类都是case class.Nil表示一个空的列表,而::表达的是一个非空的列表. 例子如下: case object Nil extends List[Nothing]{ override def is