1 #include <iostream> 2 #include <cola> 3 usando espacio de nombres std; 4 Char un [ 105 ] [ 105 ]; 5 struct nodo { 6 int x; 7 int y; 8 nodo ( int x, int y) 9 { 10 este -> x = x; 11 este -> y = y; 12 } 13 }; 14 int dir [] [ 2 ] = {{ 0, 1 }, { 1 , 0 }, { 0 , - 1 }, {- 1 , 0 }}; 15 int vis [ 105 ] [ 105 ]; 16 bool casquillo ( int x, int y) 17 { 18 si (vis [x] [y] == 0 && una [x] [y] == ' # ' ) 19 de retorno verdadera ; 20 más 21 de retorno falsa ; 22 } 23 intmain () 24 { 25 int n, m; 26 cin >> n >> m; 27 int count = 0 ; 28 para ( int i = 1 ; i <= n; ++ i) 29 para ( int j = 1 ; j <= m; ++ j) 30 { 31 cin >> a [i] [j]; 32 } 33 para ( int i = 1 ; i <= n; ++ i) 34 para ( int j = 1; j <= m; ++ j) 35 { 36 si (arbusto (i, j)) 37 { 38 cola <nodo> q; 39 inicio nodo = nodo (i, j); 40 q.push (inicio); 41 vis [i] [j] = 1 ; 42 , mientras que (! Q.empty ()) 43 { 44 nodo ahora = q.front (); 45 int x = now.x; 46 int y = now.y; 47 para (int k = 0 ; k < 4 ; k ++ ) 48 { 49 si ((x + dir [k] [ 0 ])> 0 && (x + dir [k] [ 0 ] <= n) && (y + dir [ k] [ 1 ]> 0 ) && (y + dir [k] [ 1 ] <= m)) 50 { 51 si (casquillo (x + dir [k] [ 0 ], y + dir [k] [ 1 ] )) 52 { 53 siguiente nodo = nodo (x + dir [k] [ 0 ], y + dir [k] [ 1 ]); 54 q.push (siguiente); 55 vis [x + dir [k] [ 0 ]] [y + dir [k] [ 1 ]] = 1 ; 56 } 57 } 58 } 59 q.pop (); 60 } 61 recuento ++ ; 62 } 63 } 64 tribunal << contar; 65 de retorno 0 ; 66 }