您的位置:首页 > 产品设计 > UI/UE

usaco 1.5 checker...N queens...

2012-10-27 00:51 288 查看
/*
ID:chenjiong
PROG:checker
LANG:C++
*/

#include <stdio.h>
#include <string.h>

const int MAXN = 15;

int N;
bool column[MAXN];
bool diagonal1[2 * MAXN - 1];
bool diagonal2[2 * MAXN - 1];

int ans[MAXN];
int p;
int cnt;
int print_times;

void dfs(int cur)
{
if ( cur == N + 1 )
{
if ( print_times < 3 )
{
for (int i = 0; i < N - 1; i++)
printf("%d ",ans[i]);
printf("%d\n",ans[N - 1]);
print_times++;
cnt++;
return;
}
else
{
cnt++;
return;
}
}
int j;
for ( j = 1; j <= N; j++)
{
if ( !column[j] && !diagonal1[cur + j] && !diagonal2[cur - j + N] )
{
column[j] = diagonal1[cur + j] = diagonal2[cur - j + N] = true;
ans[p] = j;
p++;
dfs(cur + 1);
p--;
column[j] = diagonal1[cur + j] = diagonal2[cur - j + N] = false;
}
}
}

int main()
{
freopen("checker.in","r",stdin);
freopen("checker.out","w",stdout);

scanf("%d",&N);

cnt = 0;
print_times = 0;
dfs(1);
printf("%d\n",cnt);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: