#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
char mat[10][10];
int ans,n;
bool ok(int x)
{
if(mat[x/n][x%n]=='X'|| mat[x/n][x%n]=='s')
return false;
for(int i=x/n;i>=0;i--)//这1列
{
if(mat[i][x%n]=='s')
return false;
if(mat[i][x%n]=='X')//先遇到哪个
break;
}
for(int i=x%n;i>=0;i--)//这1行
{
if(mat[x/n][i]=='s')
return false;
if(mat[x/n][i]=='X')
break;
}
return true;
}
void dfs(int c,int cnt)
{
ans=max(ans,cnt);
if(c>=n*n)
return ;
if(ok(c))
{
mat[c/n][c%n]='s';
dfs(c+1,cnt+1);
mat[c/n][c%n]='.';
}
dfs(c+1,cnt);
}
int main()
{
while(~scanf("%d",&n) && n)
{
ans=0;
for(int i=0;i<n;i++)
scanf("%s",mat[i]);
dfs(0,0);
printf("%d\n",ans);
}
return 0;
}
hdu 1045
最新推荐文章于 2018-12-09 14:27:55 发布