#include<bits/stdc++.h>
using namespace std;
int x[100], y[100], zhuoxia[100], zhuoshang[100];
int jie;
int n;
int shu() {//输出
if(jie<3) {
for(int i=1; i<=n; i++) {
cout<<x[i]<<" ";
}
cout<<endl;
}
jie++;//记录
}
void dfs(int i) {
if(i>n) {
shu();
return ;
} else {
for(int j=1; j<=n; j++) {
if((!y[j])&&(!zhuoxia[i+j])&&(!zhuoshang[i-j+n])) {
x[i]=j;
y[j]=1;
zhuoxia[i+j]=1;
zhuoshang[i-j+n]=1;//记录
dfs(i+1);
y[j]=0;
zhuoxia[i+j]=0;
zhuoshang[i-j+n]=0;//回溯
}
}
}
}
int main() {
cin>>n;
dfs(1);
cout<<jie;
return 0;
}
经典的dfs搜索思路大体为标记然后搜索,回溯然后继续搜索直到全部搜完