$\color{red}{acwing842.排列数字}$acwing842.排列数字https://www.acwing.com/problem/content/description/844/
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
int a[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i ++) a[i] = i;
do{
for (int i = 1; i <= n; i ++)
printf("%d ", a[i]);
puts("");
}while(next_permutation(a + 1, a + n + 1));//若存在下一个排列,便改变排列为它,并返回true
}
输入 : 3
输出 :
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
next_permutation是一个原地算法(会直接改变这个集合,而不是返回一个集合),它对一个可以遍历的集合(如string,如vector),将 迭代器范围 [first, last] 的排列 排列到下一个排列(第一个是名词,第二个是动词,第三个是名词),其中所有排列的集合默认按照operator < 或者 字典序 或者 按照输入到第三个参数 comp 的排列方法排列。
对于next_permutation函数,其函数原型为:
#include <algorithm>
bool next_permutation(iterator start,iterator end)
当当前序列不存在下一个排列时,函数返回false,否则返回true