【全排列问题DFS实现执行示意图】

【示意图依托的核心代码】
cpp
#include <bits/stdc++.h>
using namespace std;
const int maxn=12;
int a[maxn],st[maxn];
int n;
//确定第pos位及后续位置的值
void dfs(int pos) {
if(pos==n+1) {
for(int i=1; i<=n; i++) {
printf("%5d",a[i]);
}
printf("\n");
return;
}
//枚举所有数字,尝试为当前位置pos选择一个可用值
for(int i=1; i<=n; i++) {
if(st[i]==0) {
a[pos]=i;
st[i]=1;
dfs(pos+1);
st[i]=0; //撒销选择
}
}
}
int main() {
scanf("%d",&n);
dfs(1);
return 0;
}
/*
in:
3
out:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/148295326