#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();
        
forint i= 0; i< n; ++i ) gets( map[i] );
        
        max
= 0;
        dfs( 
00 );
        printf(
"%d\n", max );
    }

    
    
return 0;
}

posted on 2008-11-14 12:38 Darren 阅读(299) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理