排列数字dfs
#include<iostream>
using namespace std;
const int N=10;
bool st[N];//记录数字是否被使用
int path[N];//输出所有可能的组合
int n;
int dfs(int u){//u表示深度
if(u>n){
for(int i=1;i<=n;i++){
cout<<path[i]<<" ";
cout<<endl;
}
for(int i=1;i<=n;i++){
if(!st[i]){//如果i没有被遍历过
path[u]=i;//让这一层的第一个数字等于i
st[i]=true;
dfs(u+1);//开始遍历下一层
st[i]=false;//当遍历到最后一层了,回溯继续开始遍历
}
}
}
int main(){
cin>>n;
dfs(1);//先从第一层开始遍历
}