试试
```cpp
#include<bits/stdc++.h>
using namespace std;
int a[100],b2[100],b1[100],b3[100],n,ans=0;
bool f[1000][1000];
void dfs(int x)
{
if(x>n)
{
ans++;
return ;
}
for(int i=1;i<=n;i++)
{
if(b1[i]==0&&b2[x+i]==0&&b3[x-i+15]==0&&f[x][i]==0)
{
a[x]=i;
b1[i]=1;
b2[x+i]=1;
b3[x-i+15]=1;
dfs(x+1);
b1[i]=0;
b2[x+i]=0;
b3[x-i+15]=0;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
char ch;
/**/for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>ch;
if(ch=='.')
{
f[i][j]=1;
}
}
}/**/
dfs(1);
cout<<ans;
return 0;
}
```
by gsc15759915601 @ 2023-07-18 09:12:46
加了
```cpp
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
```
可以提很多速。
by gsc15759915601 @ 2023-07-18 09:14:06
没用(悲
by Zsy__rnfmabj @ 2023-07-18 09:36:32
```
for(int i=1;i<=n;i++)
{
if(b1[i]==0&&b2[x+i]==0&&b3[x-i+15]==0&&f[x][i]==0)
{
a[x]=i;
b1[i]=1;
b2[x+i]=1;
b3[x-i+15]=1;
dfs(x+1);
b1[i]=0;
b2[x+i]=0;
b3[x-i+15]=0;
}
}
```
这个循环太慢了,用位运算优化,lowbit查找很快的
by Da_capo @ 2023-07-20 10:44:16
Ok,已关
by Zsy__rnfmabj @ 2023-07-20 13:25:29