题目
来源
842. 排列数字 - AcWing题库
思路
由于相对简单,是dfs的模板题,具体思路详见代码
代码
#include<bits/stdc++.h>
using namespace std;
const int N=10;
int state[N],path[N];//是否使用过,当前位置
int n;
void dfs(int u){ //dfs其实就是暴搜,最重要的是选择好搜索顺序
if(u>n){ //当前位置已经超出范围,选择输出
for(int i=1;i<=n;i++){
cout<<path[i]<<" ";
}cout<<endl;
}
for(int i=1;i<=n;i++){ //依次枚举是否使用过
if(!state[i]){ //没有使用
path[u]=i; //当前路径可放
state[i]=1; //标志已经使用
dfs(u+1); //选择下一位置
state[i]=0; //回恢复现场
}
}
}
int main(){
int u;
cin>>n;
dfs(1); //从1开始dfs
return 0;
}