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 <bits/stdc++.h>
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;
}