#include<cstdio>
const int k=5;
int map[k][k];
int n;
int maxs;
bool isval(int x,int y)
{
int i;
for(i=x;i>=0;i--)
{
if(map[i][y]==-1)break;//-1Ϊ‰¦
else if(map[i][y]==1)return false;//1ΪÎï
}
for(i=x;i<n;i++)
{
if(map[i][y]==-1)break;
else if(map[i][y]==1)return false;
}
for(i=y;i>=0;i--)
{
if(map[x][i]==-1)break;//-1Ϊ‰¦
else if(map[x][i]==1)return false;//1ΪÎï
}
for(i=y;i<n;i++)
{
if(map[x][i]==-1)break;
else if(map[x][i]==1)return false;
}
return true;
}
void dfs(int x,int y,int sum)
{
maxs=maxs<sum ? sum : maxs;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if((x*n+y<=i*n+j)&&map[i][j]==0&&isval(i,j))
{
map[i][j]=1;
dfs(i,j,sum+1);
map[i][j]=0;
}
}
int main()
{
while(scanf("%d",&n),n)
{
int i,j;
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<n;j++)
{
char temp;
scanf("%c",&temp);
if(temp=='X')map[i][j]=-1;
else map[i][j]=0;
}
}
maxs=0;
dfs(0,0,0);
printf("%d\n",maxs);
}
return 0;
}
hdu1405
最新推荐文章于 2020-03-31 20:30:01 发布