题目描述
把 \red{1}1 ~
\red{n }n这 \red{n}n 个整数排成一行后随机打乱顺序,输出所有可能的次序。
输入格式
一个整数\red{n}n。
输出格式
按照从小到大的顺序输出所有方案,每行\red{1}1个。
首先,同一行相邻两个数用一个空格隔开。
其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
样例
输入数据
3
Copy
输出数据
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
代码:
#include <iostream>
#include <string.h>
#include <cstdio>
#include <algorithm>
using namespace std;
#define LL long long
int n , a[15];
bool l[15];
inline void print()
{
for (int i = 0 ; i < n ; ++i)
{
putchar(a[i] + 48);
putchar(32);
}
putchar(10);
}
void f(int m)
{
if (m == n)
{
print();
return;
}
for (int i = 1 ; i <= n ; ++i)
{
if (l[i])
continue;
l[i] = 1;
a[m] = i;
f(m + 1);
l[i] = 0;
}
return;
}
int main()
{
memset(l , 0 , sizeof(l));
cin >> n;
f(0);
return 0;
}