Next Permutation代码
//输入数字个数n 再输一个数字m
//再输入一个排列(比如这个序列是全排列的第p组) 需要输出全排列后第p+m组数
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int ord[n+1];
for(int i=1;i<=n;++i) cin>>ord[i];
for(int i=1;i<=m;++i){//next_permutation表示往后排一个序列 这个循环后就是往后排m个
//同理 prev_permutation表示往前排一个序列 这个循环后就是往前排m个
next_permutation(ord+1,ord+1+n);//因为这里的ord从1开始存储的
prev_permutation(ord+1,ord+1+n);
}
for(int i=1;i<n;++i) cout<<ord[i]<<' ';
cout<<ord[n];
}
//next_permutation运算
输入
5 2
1 2 3 4 5
输出
1 2 4 3 5
//prev_permutation运算
输入
5 2
1 2 4 3 5
输出
1 2 3 4 5
全排列用法
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int ans[3]={1,3,2};
// sort(ans,ans+4); ①注意!
do { /*注意这步,如果是while循环,则需要提前输出*/
for(int i=0;i<3;++i)
cout<<ans[i]<<" ";
cout<<endl;
}while(next_permutation(ans,ans+3));
return 0;
}
sort(ans,ans+4) 是将数字进行排序
全排列后输出的第一个是最小的 就是 1 2 3
加上sort()后的输出
1 2 3//从最小的一个开始挨个排
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
不加sort()后的输出
1 3 2//会从给定的第一个序列后往大的排
2 1 3
2 3 1
3 1 2
3 2 1