【模板】 全排列
传送门
题意
按照字典序输出\(1\sim n\)的全排列
数据范围
\(1\leq n\leq 7\)
题解
-
状态表示当前已经存储的数的个数
-
\(st\)表示\(1\sim n\)中每个数是否被选择
搜索后每当有\(n\)个数就输出,每次递归后回溯\(st\)数组
- 遍历从小到大保证了字典序
Code
#include<bits/stdc++.h>
using namespace std;
#define rep(i, a, n) for(int i = a; i < n; i ++)
int path[10], n;
bool st[10];
void dfs(int u) {
if(u == n + 1) {
rep(i, 1, n + 1) cout<<path[i]<<' ';
cout<<endl;
}
rep(i, 1, n + 1) {
if(!st[i]) {
path[u] = i;
st[i] = 1;
dfs(u + 1);
st[i] = 0;
}
}
}
int main() {
cin>>n;
dfs(1);
}

浙公网安备 33010602011771号