比赛 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);
}