#include<bits/stdc++.h>
using namespace std;
int a[100001],n;
int book[100001];
void dfs(int step){
if(step==n+1){
for(int i=1;i<=n;i++) printf("%d ",a[i]);
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
return;
}
int main(){
cin>>n;
dfs(1);
return 0;
}
Below is the board with comments:
#include<iostream>
using namespace std;
int a[100001],n;
int book[100001];//判断是否被访问
void dfs(int step){
// if(满足所需要的条件) { 相应的操作;return;}
if(step==n+1){
for(int i=1;i<=n;i++) printf("%d ",a[i]);//打印
cout<<endl;
return;
}
//枚举
for(int i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i;//记录数据
book[i]=1;//记录相应的数已经被访问
dfs(step+1);//进一步搜索
book[i]=0;//恢复到未被访问
}
}
}
int main(){
cin>>n;
dfs(1);//从一开始搜索并且打印
return 0;
}