【模板】 全排列

传送门

题意

按照字典序输出\(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);
}
posted @ 2020-06-16 22:44  Hyx'  阅读(153)  评论(0)    收藏  举报