#include <iostream>
#include <stdio.h>
using namespace std;
int n, maxcur;
char a[4][4];
bool
check(int x, int y)
{
for(int i=x-1; i>=0; i--){
if(a[i][y]=='O')return false;
if(a[i][y]=='X')break;
}
for(int i=y-1; i>=0; i--){
if(a[x][i]=='O')return false;
if(a[x][i]=='X')break;
}
return true;
}
void
solve(int k, int current)
{
int x, y;
if(k==n*n){
if(current >maxcur){
maxcur=current;
return;
}
}
else{
x=k/n;
y=k%n;
if(a[x][y]=='.' && check(x, y)==true){
a[x][y]='O';
solve(k+1, current+1);
a[x][y]='.';
}
solve(k+1, current);
}
}
int
main()
{
while(cin>>n && n!=0){
for(int i=0; i<n; i++)
for(int j=0; j<n; j++){
cin>>a[i][j];
}
maxcur=0;
solve(0, 0);
cout<<maxcur<<endl;
}
return 0;
}
转载于:https://my.oschina.net/dianpaopao/blog/124556