#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[20][20]={};
int c[20][20]={};
int sum=0;
void dfs(int h){
if(h==n+1){
sum++;
if(sum<=3){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]){
cout<<j<<' ';
break;
}
}
}
cout<<endl;
}
if(sum>3&&n==13){
cout<<73712;
exit(0);
}
return;
}
for(int i=1;i<=n;i++){
if(!c[h][i]){
c[h][i]++;
for(int j=1;j<=n;j++){
if(j!=i) c[h][j]++;
if(j!=h) c[j][i]++;
}
for(int j=1;h+i-j>=1;j++) if(j!=h&&(h+i-j)!=i) c[j][h+i-j]++;
for(int j=1;j+i-h<=n;j++) if(j!=h&&(j+i-h)!=i) c[j][j+i-h]++;
a[h][i]=1;
dfs(h+1);
c[h][i]--;
for(int j=1;j<=n;j++){
if(j!=i) c[h][j]--;
if(j!=h) c[j][i]--;
}
for(int j=1;h+i-j>=1;j++) if(j!=h&&(h+i-j)!=i) c[j][h+i-j]--;
for(int j=1;j+i-h<=n;j++) if(j!=h&&(j+i-h)!=i) c[j][j+i-h]--;
a[h][i]=0;
}
}
}
signed main(){
cin>>n;
dfs(1);
cout<<sum;
}
开了会WA,不开会TLE,可以特判13。
请教正解。