AcWing 842. 排列数字
原题链接
简单
作者:
郡呈
,
2020-05-24 23:53:05
,
所有人可见
,
阅读 564
// 版本1
#include <iostream>
using namespace std;
const int N = 10;
int n;
int path[N];
bool st[N];
// path: 记录坑位数字
// st: 记录坑位是否被占用
void dfs(int u) {
// u: 当前放到第几个坑位
if(u == n) {
for(int i = 0; i < n; i++) cout << path[i] << ' ';
cout << endl;
}
for(int i = 1; i <= n; i++) {
if(!st[i]) {
path[u] = i;
st[i] = true;
dfs(u+1);
// 放下一个坑位&恢复原状
st[i] = false;
}
}
}
int main() {
cin >> n;
dfs(0);
//从0号坑位开始放
return 0;
}
// 版本2
int main() {
cin >> n;
//dfs(0);
vector<int> pa(n);
for(int i = 0; i < n; i++) pa[i] = i+1;
do {
for(int i = 0; i < n; i++) cout << pa[i] << ' ';
cout << endl;
}while(next_permutation(pa.begin(), pa.end()));
return 0;
}