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;
}