您的位置:首页 > 其它

[USACO 6.5.5]Checker Challerge

2017-01-23 12:45 363 查看
题目大意

  n皇后问题

题解

  轻微的剪枝就过了.

  HINT4不会写...

代码

/*
TASK:checker
LANG:C++
*/
#include <cstdio>
#include <cstring>

using namespace std;

bool col[15], zd[30], fd[30];
int prow[15];
int ans, n;

void dfs(int row)
{
if (row == n)
{
ans++;
if (ans <= 3)
{
for (int i = 0; i < n-1; ++i) printf("%d ", prow[i]);
printf("%d\n", prow[n-1]);
}
return;
}
for (int i = 0; i < n; ++i)
if (!col[i] && !zd[row+i] && !fd[row+n-i-1])
{
col[i] = zd[row+i] = fd[row+n-i-1] = true;
prow[row] = i + 1;
dfs(row + 1);
col[i] = zd[row+i] = fd[row+n-i-1] = false;
}
}

int main()
{
freopen("checker.in", "r", stdin);
freopen("checker.out", "w", stdout);
scanf("%d", &n);
memset(col, 0, sizeof(col));
memset(zd, 0, sizeof(zd));
memset(fd, 0, sizeof(fd));
ans = 0;
dfs(0);
printf("%d\n", ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: