比赛 |
20160708BDFS |
评测结果 |
AAAAAAAATT |
题目名称 |
跳棋的挑战 |
最终得分 |
80 |
用户昵称 |
confoo |
运行时间 |
2.364 s |
代码语言 |
C++ |
内存使用 |
0.29 MiB |
提交时间 |
2016-07-08 09:07:29 |
显示代码纯文本
#include<cstdio>
#include<cmath>
const int MAXN=100,OFFSET=20;
bool col[MAXN],dia1[MAXN],dia2[MAXN];
int n,rec[MAXN],sz,ans;
void dfs(int row=1){
if(row>n) {
ans++;
if(ans>3) return;
for(int i=1;i<=n;i++) printf("%d ",rec[i]);
printf("\n");
}
else for(int i=1;i<=n;i++) if(!col[i]&&!dia1[i+row]&&!dia2[i-row+OFFSET])
col[i]=dia1[i+row]=dia2[i-row+OFFSET]=1,rec[++sz]=i,dfs(row+1),rec[sz--]=0,col[i]=dia1[i+row]=dia2[i-row+OFFSET]=0;
}
int main(){
freopen("checker.in","r",stdin);
freopen("checker.out","w",stdout);
scanf("%d",&n);
dfs(1);
printf("%d",ans);
}