IaLWH @ 2024-08-09 11:28:33
#include<cstdio>
#define xrr x+j*dx[i]
#define yrr y+j*dy[i]
int n;
const int dx[8]={0,1,1,1,0,-1,-1,-1},dy[8]={1,1,0,-1,-1,-1,0,1};
int v[20][20];
int dfs(int x,int y){
int ans=0;
v[x][y]++;
for(int i=0;i<8;i++)
for(int j=1;xrr>=0&&xrr<n&&yrr>=0&&yrr<n;j++)
v[xrr][yrr]++;
for(int i=0;i<n;i++){
if(x+1>=n)return 1;
if(v[x+1][i])continue;
ans+=dfs(x+1,i);
}
v[x][y]--;
for(int i=0;i<8;i++)
for(int j=1;xrr>=0&&xrr<n&&yrr>=0&&yrr<n;j++)
v[xrr][yrr]--;
return ans;
}
int main(){
int n,ans=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
ans+=dfs(0,i);
printf("%d",ans);
return 0;
}
只打算输出解的总数,然后样例没过