#include <stdio.h>
#include <stdlib.h>
int n, max;
char map[5][5];
bool ok( int x, int y )
{
return x>= 0 && x< n && y>= 0 && y< n;
}
bool isok( int xx, int yy )
{
int x= xx, y= yy;
if( map[xx][yy]!= '.' ) return false;
while( ok(x,y) && map[x][y]== '.' ) x--;
if( ok(x,y) && map[x][y]== 'O' ) return false;
x= xx, y= yy;
while( ok(x,y) && map[x][y]== '.' ) x++;
if( ok(x,y) && map[x][y]== 'O' ) return false;
x= xx, y= yy;
while( ok(x,y) && map[x][y]== '.' ) y--;
if( ok(x,y) && map[x][y]== 'O' ) return false;
x= xx, y= yy;
while( ok(x,y) && map[x][y]== '.' ) y++;
if( ok(x,y) && map[x][y]== 'O' ) return false;
return true;
}
void dfs( int pos, int cnt )
{
if( pos== n* n )
{
if( cnt> max ) max= cnt;
return;
}
int y= pos% n;
int x= pos/ n;
if( isok( x, y ) )
{
map[x][y]= 'O';
dfs( pos+ 1, cnt+ 1 );
map[x][y]= '.';
}
dfs( pos+ 1, cnt );
}
int main()
{
while( scanf("%d",&n), n!= 0 )
{
getchar();
for( int i= 0; i< n; ++i ) gets( map[i] );
max= 0;
dfs( 0, 0 );
printf("%d\n", max );
}
return 0;
}
posted on 2008-11-14 12:38
Darren 阅读(298)
评论(0) 编辑 收藏 引用