我太蒟蒻了,TLE只有70,求大佬优化
#include<bits/stdc++.h>
using namespace std;
int n,s;
char a[20][20];
int f[20][20];
void fang(int x,int y){
for(int i=1;i<=n;i++){
f[x][i]=1;
f[i][y]=1;
if(y-x+i>0&&y-x+i<=n){
f[i][y-x+i]=1;
}
if(y+x-i>0&&y+x-i<=n){
f[i][y+x-i]=1;
}
}
}
void dfs(int x){
if(x==n+1){
s++;
return;
}else{
for(int i=1;i<=n;i++){
if(a[x][i]=='*'&&f[x][i]==0){
int b[20][20];
memcpy(b,f,sizeof(b));
fang(x,i);
dfs(x+1);
memcpy(f,b,sizeof(f));
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
dfs(1);
cout<<s;
return 0;
}