[OI - STL] next_permutation( ) & prev_permutation( )函数

next_permutation( ) 和 prev_permutation( ) 函数基本类似,都需要用到头文件名<algorithm>

next_permutation()函数

用法:next_permutation(first,last)

作用:next_permutation()函数将 [ first , last ] 区间中的序列转换为字典序的下一个排列。如果下一个排列存在返回true,如果下一个排列不存在(即区间中包含的是字典序的最后一个排列),则该函数返回false,并将区间转换为字典序的第一个排列。

代码实现

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5
 6 using namespace std;
 7 //#define DEBUG(x) cerr << #x << "=" << x << endl
 8 const int maxn = 1e5 + 10;
 9
10 int n, f[maxn];
11 int main()
12 {
13     //ios::sync_with_stdio(false);
14     cin.tie(0);
15     cin >> n;
16     for (int i = 0; i < n; i++) cin >> f[i];
17     sort(f, f + n);
18     do
19     {
20         for (int i = 0; i < n; i++) cout << f[i] << " ";
21         //cout << endl;
22         puts("");
23     }while (next_permutation(f, f + n));
24     return 0;
25 } 

prev_permutation()函数

用法:prev_permutation(first,last)

作用:prev_permutation()函数将 [ first , last ] 区间中的序列转换为字典序的上一个排列。如果上一个排列存在返回true,如果上一个排列不存在(即区间中包含的是字典序的第一个排列),则该函数返回false,并将区间转换为字典序的最后一个排列。

代码实现

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5
 6 using namespace std;
 7 //#define DEBUG(x) cerr << #x << "=" << x << endl
 8 const int maxn = 1e5 + 10;
 9
10 int n, f[maxn];
11
12 int cmp(int a, int b)
13 {
14     return a > b;
15 }
16
17 int main()
18 {
19     //ios::sync_with_stdio(false);
20     cin.tie(0);
21     cin >> n;
22     for (int i = 0; i < n; i++) cin >> f[i];
23     sort(f, f + n, cmp);
24     do
25     {
26         for (int i = 0; i < n; i++) cout << f[i] << " ";
27         //cout << endl;
28         puts("");
29     }while (prev_permutation(f, f + n));
30     return 0;
31 } 

原文地址:https://www.cnblogs.com/aiyi2000/p/9847845.html

时间: 2024-10-13 03:20:51

[OI - STL] next_permutation( ) & prev_permutation( )函数的相关文章

STL具体操作之next_permutation和prev_permutation函数

 next函数默认的是从小到大的顺序,pre函数默认的是从大到小的顺序: {3,1,2}用next得到的结果是{3,1,2}和{3,2,1}: 用pre得到的结果是{3,1,2},{2,3,1},{2,1,3},{1,3,2,},{1,2,3}: 原理如下: [STL]next_permutation的原理和使用 1.碰到next_permutation(permutation:序列的意思) 今天在TC上碰到一道简单题(SRM531 - Division Two - Level One),是

C++ STL 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,

STL next_permutation排列

概念 全排列的生成算法有很多种,有递归遍例,也有循环移位法等等.C++/STL中定义的next_permutation和prev_permutation函数则是非常灵活且高效的一种方法,它被广泛的应用于为指定序列生成不同的排列.本文将详细的介绍prev_permutation函数的内部算法. 按照STL文档的描述,next_permutation函数将按字母表顺序生成给定序列的下一个较大的序列,直到整个序列为减序为止.prev_permutation函数与之相反,是生成给定序列的上一个较小的序列

打印全排列和stl::next_permutation

打印全排列是个有点挑战的编程问题.STL提供了stl::next_permutation完美的解决了这个问题. 但是,如果不看stl::next_permutation,尝试自己解决,怎么做? 很自然地,使用递归的办法: 1. 单个元素的排列只有1个. 2. 多个元素的排列可以转化为: 以每个元素为排列的首个元素,加上其他元素的排列. 有了思路,就可以编码了. 第一个版本: void printAllPermutations(const std::string& prefix, int set[

STL的fmt函数

由于EL表达式的运算结果是浮点数时(而且EL表达式的除运算结果也是浮点数,这和其他语言还有点不一样),在网页上显示一长串确实不雅.使用JSTL的fmt标签,可以实现对数字.货币.时间--的格式化显示. 首先在页面前导入该标签库 <%@ taglib uri=""http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 数字格式化(value部分可为EL表达式): 1.<fmt:formatNumb

c++ STL unique , unique_copy函数

一.unique函数 类属性算法unique的作用是从输入序列中"删除"全部相邻的反复元素. 该算法删除相邻的反复元素.然后又一次排列输入范围内的元素,而且返回一个迭代器(容器的长度没变,仅仅是元素顺序改变了),表示无反复的值范围得结束. // sort words alphabetically so we can find the duplicates sort(words.begin(), words.end()); /* eliminate duplicate words: *

SGI STL的 power 函数之个人理解

SGI STL的power函数用于计算某数的n次方 例如求 x的n次幂 n = 20 (20 二进制 10100) 1 0 1 0 0 20 = 2^4 + 2^2 x^20 = x^((2^4) + (2^2)) = x^( 2^4 ) * x ^( 2^2) part2 part1 template <class _Tp, class _Integer, class _MonoidOperation> _Tp __power(_Tp __x, _Integer __n, _MonoidOp

STL区间成员函数及区间算法总结

STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法: 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间成员函数不适用的情况下也应该使用区间算法,至少,相比手写循环而言,它更加简单,有效,并且不容易出错: 区间成员函数 区间构造 标准容器都支持区间构造函数: container::container(InputIterator begin, // 区间的起点 InputIterator end); /

C++ STL的sort 函数 以及自定义的比较函数

没什么特别擅长的内容,先做个小笔记好了.在编程时,使用C++的标准模板库(STL)能节约工作量,增加代码的可读性,能灵活运用无疑会提高编程的效率,俗话说:Write less, create more ~ 然后这篇笔记就简单讨论一下sort函数吧.对于vector,我们使用algorithm头文件中的sort函数来排序元素,如果元素类型是实数.字符串之类的,直接使用sort 函数就可以方便的排序了.使用方法就是: #include <vector> #include <algorithm