比赛 |
皇后 |
评测结果 |
AAAAAAAAAA |
题目名称 |
N皇后问题 |
最终得分 |
100 |
用户昵称 |
Tabing010102 |
运行时间 |
0.009 s |
代码语言 |
C++ |
内存使用 |
0.29 MiB |
提交时间 |
2017-03-17 20:57:18 |
显示代码纯文本
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 20;
FILE *fin, *fout;
int n, ans=0, d[maxn];
bool test(int row, int col) {
for(int i = 1; i < row; i++)
if(d[i]==col || d[i]-(row-i)==col || d[i]+(row-i)==col)
return false;
return true;
}
void dfs(int dep) {
if(dep >= n+1) { ans++; return; }
for(int i = 1; i <= n; i++) {
if(test(dep, i)) {
d[dep] = i;
dfs(dep+1);
}
}
}
int main() {
fin = fopen("queen.in", "r");
fout = fopen("queen.out", "w");
// fin = stdin; fout = stdout;
fscanf(fin, "%d", &n);
memset(d, 0, sizeof(d));
dfs(1);
fprintf(fout, "%d\n", ans);
return 0;
}