林扬泉 • 3个月前
#include<bits/stdc++.h>
using namespace std;
const int N=10;
char a[N][N];
int res;
int n=1;
void dfs(int cur,int cnt){
if(cur==n*n){
res=max(res,cnt);
return;
}
int tx=cur/n,ty=cur%n;
dfs(cur+1,cnt);
if(a[tx][ty]=='.'){
bool flag=true;
for(int i=tx;i<n;i++){
if(a[i][ty]=='X'){
break;
}
if(a[i][ty]=='F'){
flag=false;
}
}
for(int i=tx;i>=0;i--){
if(a[i][ty]=='X'){
break;
}
if(a[i][ty]=='F'){
flag=false;
}
}
for(int i=ty;i<n;i++){
if(a[tx][i]=='X'){
break;
}
if(a[tx][i]=='F'){
flag=false;
}
}
for(int i=ty;i>=0;i--){
if(a[tx][i]=='X'){
break;
}
if(a[tx][i]=='F'){
flag=false;
}
}
if(flag){
a[tx][ty]='F';
dfs(cur+1,cnt+1);
a[tx][ty]='.';
}
}
}
int main(){
while(1){
scanf("%d",&n);
if(n==0){
break;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
dfs(0,0);
printf("%d\n",res);
res=0;
}
return 0;
}
Comments: