#include<bits/stdc++.h>
using namespace std;
#define XL_size 100000001
#define large_size 10000001
#define big_size 400001
#define _size_ 200001
#define mid_size 100001
#define small_size 10001
#define mini_size 5001
#define micro_size 2001
int n,arr[100],vis1[100]/*列*/,vis2[100]/*主对角线*/,vis3[100]/*副对角线*/,vis4[100][100],cnt;
char temp;
void dfs(int r)
{
if(r>n)
{
cnt++;
return;
}
for(int j=1;j<=n;j++)
{
if(!vis1[j]&&!vis2[r-j+n]&&!vis3[r+j]&&!vis4[r][j])
{
arr[r]=j;
vis1[j]=1;
vis2[r-j+n]=1;
vis3[r+j]=1;
vis4[r][j]=1;
dfs(r+1);
vis1[j]=0;
vis2[r-j+n]=0;
vis3[r+j]=0;
vis4[r][j]=0;
arr[r]=0;
}
}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>temp;
if(temp=='.') vis4[i][j]=1;
}
}
dfs(1);
cout<<cnt;
}
提交记录 看有个位运算的tag,但是本蒟蒻不知道怎么用位运算来优化