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

Posted aiyi2000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 } 

 

以上是关于[OI - STL] next_permutation( ) & prev_permutation( )函数的主要内容,如果未能解决你的问题,请参考以下文章

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

[技术] OIer的STL入门教程

夏令营讲课内容整理 Day 6 Part 1.

堆——练习题

set_difference的介绍

警钟长鸣