问题 l: sgl的序列问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 19 解决: 6
[提交] [状态] [讨论版] [命题人:admin]
题目描述
把 1~n 这 n(n<10) 个整数排成一行后随机打乱顺序,输出所有可能得到的序列。
输入
一个整数n。
输出
按照从小到大的顺序输出所有方案,每行1个。 首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
样例输入
3
样例输出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
#include <bits/stdc++.h>
using namespace std;
int q[110], n;
void dfs(int x, int now) {
if (q[0] == n) {
for (int i = 1; i <= q[0]; i++)
cout << q[i] << " ";
puts("");
return ;
}
for (int i = 1; i <= n; i++)
if (!(now >> (i - 1) & 1)) {
q[++q[0]] = i;
dfs(i + 1, now + (1 << (i - 1)));
q[q[0]--] = 0;
}
return ;
}
int main() {
cin >> n;
dfs(1, 0);
}