next_permutation函数
next_permutation函数是求全排列的下一位,返回值为bool类型,判断是否有下一位并交换,相对的prev_permutation()函数是全排列的上一位。
例题:https://ac.nowcoder.com/acm/contest/1086/L(火星人)
#include <cstdio>
#include <algorithm>
using namespace std ;
const int N = 10005 ;
int a[N] ;
int main(){
int n , m ;
scanf ("%d%d",&n,&m) ;
for (int i = 0 ; i < n ; ++i)
scanf ("%d",&a[i]) ;
while(m --){
//next_permutation(a,a+n) ;
//next_permutation函数的实现
int k = n - 1;
while (a[k - 1] > a[k]) k -- ;
k -- ;
int t = k;
while (t + 1 < n && a[t + 1] > a[k]) t ++ ;
swap(a[t], a[k]);
reverse(a + k + 1, a + n);
}
for (int i = 0 ; i < n ; ++i)
printf ("%d ",a[i]) ;
printf ("\n") ;
return 0 ;
}
next_permutation详解与应用
本文深入探讨了next_permutation函数的工作原理,该函数用于生成序列的下一个全排列。通过一个示例问题“火星人”,文章详细展示了如何使用next_permutation进行编码,并提供了一个手动实现next_permutation的代码片段,帮助读者理解其内部机制。

356

被折叠的 条评论
为什么被折叠?



