P1706 全排列问题
全排列问题
题目描述
按照字典序输出自然数 \(1\) 到 \(n\) 所有不重复的排列,即 \(n\) 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
一个整数 \(n\)。
输出格式
由 \(1 \sim n\) 组成的所有不重复的数字序列,每行一个序列。
每个数字保留 \(5\) 个场宽。
样例 #1
样例输入 #1
3
样例输出 #1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
提示
\(1 \leq n \leq 9\)。
2.题解
2.1 排列枚举
思路:使用next_permutation函数
思路同排列枚举,利用next_permutation,不断提升字节序,输出不同的排列组合即可
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int> arr(n);
for(int i = 0; i < n; i++)
arr[i] = i + 1;
do{
for(int i = 0; i < n; i++){
cout << setw(5) << arr[i];
}
cout << endl;
}while(next_permutation(arr.begin(), arr.end()));
}