提交时间:2024-08-20 16:57:05

运行 ID: 169746

#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; }