10分求助!
查看原帖
10分求助!
1378097
zjinyi楼主2024/12/14 12:04

评测记录: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;
}
2024/12/14 12:04
加载中...