太慢了,自测 N=14 花费 16 秒
#include<bits/stdc++.h>
using namespace std;
const int SIZE=150;
int n,ans[SIZE],counted;
bool s[SIZE][SIZE];
char k[SIZE][SIZE];
bool check(int x,int y){
if (k[x-1][y-1]=='.') return 0;
for (int i=1;i<=n;i++)
if (s[i][y]) return 0;
for (int i=max(1-x,1-y);i<=max(n-x,n-y);i++)
if (i && s[x+i][y+i]) return 0;
for (int i=1,j=x+y-1;j;i++,j--)
if (i!=x && s[i][j]) return 0;
return 1;
}
void dfs(int t){
if (t>=n){
counted++;
return;
}
t++;
for (int i=1;i<=n;i++){
if (check(t,i)){
ans[t]=i,s[t][i]=1;
dfs(t);
ans[t]=0,s[t][i]=0;
}
}
}
int main(){
scanf("%d",&n);
for (int i=0;i<n;i++) scanf("%s",k[i]);
dfs(0);
printf("%d",counted);
return 0;
}