输入一个整数n(n <= 9),输出1、2、3、······、n这n个数的全排列(按照字典序输出)。
输入
一个整数n
输出
多行,每行表示一种排列,行内使用空格分隔相邻两数。
输入样例
3
输出样例
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
解题思路
利用递归 创建两个数组 一个数组表示用过的数 另一个存放排好的顺序
代码
#include <bits/stdc++.h>
#include<iostream>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <deque>
#include <list>
#include <utility>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <bitset>
#include <iterator>
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
const int MOD = 1E9+7;
const int N = 100000+5;
using namespace std;
int n,a[N];
int b[N];
void dfs(int x)
{
if(x == n+1){
for(int i =1; i <= n; i++){
cout << a[i] << ' ';
}
cout << endl;
return;
}
for(int i = 1; i <= n; i++){
if(b[i]==0){
a[x]= i;
b[i]= 1;
dfs(x+1);
b[i]= 0;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
dfs(1);
return 0;
}