杭电 HOJ 2553 N皇后问题
#include <iostream>
#include <cmath>
using namespace std;
const int N = 11;
int queens[N][2];
void set_queen(int i, int n, int *tot)
{
if (i > n)
{
(*tot)++;
return;
}
for (int j = 1; j <= n; ++j)
{
int ok = 1;
for(int q = 1; q < i; ++q)
{
//check same coloumn
if (queens[q][1] == j)
{
ok = 0;
break;
}
// check same slash
if (abs(queens[q][0] - i) == abs(queens[q][1] - j))
{
ok = 0;
break;
}
}
if (ok)
{
queens[i][0] = i;
queens[i][1] = j;
set_queen(i+1, n, tot);
}
}
}
int account_nqueen(int n)
{
int tot = 0;
set_queen(1, n, &tot);
return tot;
}
int main()
{
int n;
int ans[11] = {0,1,0,0,2,10,4,40,92,352,724};
while(scanf("%d", &n) != EOF && n!= 0)
{
printf("%d\n", ans[n]);
}
return 0;
}