P1706 全排列问题(dfs+递归)

1. x表示层数,第一层选了1执行for1,进入第二层选2并标记2,第二层只进行到for2,进入第三层选3并标记3,选完之后删除标记3。到现在完成第一组123

2.之后回到第二层释放2再进行for3,第二层选择3,第三层执行到for2选择2再释放2,完成第二组132

3.回到第一层执行for2,然后选2.。。。变成213,231

2.往复执行直到进行完所有全排列

#include 
using namespace std;
#define endl '\n'
#define int long long int
int n,vis[20],a[20];
void pr() {
    for (int i = 1; i <= n; i++) {
        cout << setw(5) << a[i];
    }
    cout << endl;
}
void dfs(int x) {
    if (x > n) {
        pr();
    }
    for (int i = 1; i <= n; i++) {
        if (!vis[i]) {
            a[x] = i;
            vis[i] = 1;
            dfs(x + 1);
            vis[i] = 0;
        }
    }
}
signed main() {
    cin >> n;
    dfs(1);
    return 0;
}

上一篇:vue 页面导出gif图片 img 导出gif 超简单~
下一篇:uttered(be uttered by 是什么意思)