ural 1033. Labyrinth

ural 1033. Labyrinth
floodfill
#include < iostream >
using   namespace  std;

int  N;
int  map[ 35 ][ 35 ];
const   int  d[ 4 ][ 2 ] = { 0 , - 1 , - 1 , 0 , 0 , 1 , 1 , 0 };
long   long  ans;
void  fill( int  x, int  y){
    map[x][y]
=- 1 ;
    
for ( int  i = 0 ;i < 4 ; ++ i)
        
if (map[x + d[i][ 0 ]][y + d[i][ 1 ]] > 0 )
            fill(x
+ d[i][ 0 ],y + d[i][ 1 ]);
        
else   if (map[x + d[i][ 0 ]][y + d[i][ 1 ]] == 0 ) ans ++ ;
}
int  main()
{
    scanf(
" %d " , & N); getchar();
    memset(map,
0 , sizeof (map));
    
char  ch;
    
for ( int  i = 1 ;i <= N; ++ i){
        
for ( int  j = 1 ;j <= N; ++ j){
            ch
= getchar();
            
if (ch == ' . ' ) map[i][j] = 1 ;
        }
        getchar();
    }
    ans
= 0 ;
    map[
0 ][ 1 ] = map[ 1 ][ 0 ] = map[N][N + 1 ] = map[N + 1 ][N] =- 1 ;
    fill(
1 , 1 );
    
if (map[N][N] !=- 1 ) fill(N,N);
    printf(
" %lld\n " ,ans * 9 );
    
return   0 ;
}



你可能感兴趣的:(ural 1033. Labyrinth)