全排列 DFS 模板
void dfs(int step){
if (step == N+1){ //1. 判断边界
for (int i = 1; i <= N; i++)
cout << a[i] << " ";
cout<< endl;
return; //重要!返回之前调用的那次
}
for (int i = 1; i <= N; i++){ //2. 尝试各种可能
if (vis[i] == 0){
a[step] = i; //3. 满足条件入值,标记位更新
vis[i] = 1;
dfs(step + 1); //4. 开始递归
vis[i] = 0; //5. 恢复数据, 重要!
}
}
}