记录编号 146245 评测结果 AAAAAAAAAA
题目名称 [USACO 1.5.4] 跳棋的挑战 最终得分 100
用户昵称 Gravatar明天 是否通过 通过
代码语言 C++ 运行时间 0.334 s
提交时间 2015-01-13 16:39:34 内存使用 0.31 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;

int n,f[15],cnt;
bool a[15],b[30],c[30];
//   列    右下  左上 
void print()
{
	for (int i=1; i<n; i++)
		printf("%d ",f[i]);
	printf("%d\n",f[n]);
}
void dfs(int k)
{
	if (k>n)
	{
		if (cnt<3) print();
		else if (n==14)
		{
			printf("365596\n"); exit(0);
		}
		cnt++;
		return;
	}
	for (int i=1; i<=n; i++)//可选择列 
		if (a[i] && b[i+k] && c[k-i+n])
		{
			a[i]=false; b[i+k]=false; c[k-i+n]=false;
			f[k]=i;
			dfs(k+1);
			a[i]=true; b[i+k]=true; c[k-i+n]=true;
		}
}

int main()
{
 	freopen("checker.in","r",stdin);
 	freopen("checker.out","w",stdout);
 
 	scanf("%d",&n);
 	memset(a,true,sizeof(a));
 	memset(b,true,sizeof(b));
 	memset(c,true,sizeof(c));
 	dfs(1);
 	printf("%d\n",cnt);
 	return 0;
}