评测记录:1 个 AC 9 个 WA
代码:
#include<iostream>
using namespace std;
int n, ans, in[20];
string a;
void queen(int dep, int y, int z1, int z2)
{
if(dep == n)
{
ans += 1;
return;
}
if (z1 >= (1 << n))
{
z1 -= (1 << n);
}
int flag = y | z1 | z2 | in[dep];
flag = (1 << n) - 1 - flag;
while (flag > 0)
{
int pos = flag & -flag;
queen(dep + 1, y | pos, (z1 | pos) << 1, (z2 | pos) >> 1);
flag -= pos;
}
}
int main()
{
cin >> n;
for(int i = 0; i < n; ++i)
{
cin >> a;
for (int j = 0; j < n; ++j)
{
if(a[j] == '.')
{
in[i] |= (1 << (n - j));
}
}
}
queen(0, 0, 0, 0);
cout << ans;
return 0;
}