Zoj 1002 Fire Net

Zoj 1002 Fire Net
#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;
}

你可能感兴趣的:(Zoj 1002 Fire Net)