#include<iostream>
#include<cmath>
using namespace std;
char map[5][5];
int n,max_count;
bool canPlace(int row,int col)
{
int i;
for(i=col-1;i>=0;i--)
{
if(map[row][i]=='o') return false;
if(map[row][i]=='X') break;
}
for(i=row-1;i>=0;i--)
{
if(map[i][col]=='o') return false;
if(map[i][col]=='X') break;
}
return true;
}
void dfs(int num,int count)
{
int row,col;
if(num==n*n)
{
max_count=count>max_count?count:max_count;
return;
}
row=num/n;
col=num%n;
if(map[row][col]=='.' && canPlace(row,col))
{
map[row][col]='o';
dfs(num+1,count+1);
map[row][col]='.';
}
dfs(num+1,count);
}
int main()
{
int i,j;
while(cin>>n,n)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>map[i][j];
max_count=0;
dfs(0,0);
cout<<max_count<<endl;
}
return 0;
}
hdu1045
最新推荐文章于 2019-03-09 21:51:56 发布