1の#include <iostreamの> 2の#include <キュー> 3 使用して 名前空間をSTD。 4 チャー A [ 105 ] [ 105 ]。 5 構造体ノード{ 6 int型のX; 7 INT Y。 8 ノード(int型のx、int型のY) 9 { 10 本 - > X = X。 11 本 - > Y = Y。 12 } 13 }。 14 int型 DIR [] [ 2 ] = {{ 0、1 }、{ 1、0 }、{ 0、 - 1 }、{ - 1、0 }}。 15 INT VIS [ 105 ] [ 105 ]。 16 ブールブッシュ(int型のx、int型のY) 17 { 18 であれば(VIS [X] [Y] == 0 && [X] [Y] == ' #' ) 19 リターン 真。 20 他に 21 のリターン はfalse ; 22 } 23 INTmain()の 24 { 25 INT N、M。 26 CIN >> N >> M。 27 int型のカウント= 0 ; 28 のために(INT iは= 1 ; iが<= N; ++ I) 29 のための(INT J = 1 ; J <= M; ++ j)の 30 { 31 CIN >> [I] [J]。 32 } 33 のために(INT iは= 1 ; iが<= N; ++ I) 34 のための(INT J = 1; J <= M; ++ j)の 35 { 36 であれば(ブッシュ(I、J)) 37 { 38 キュー<ノード> Q。 39 ノード開始= ノード(i、j)は、 40 q.push(スタート)。 41 VIS [I] [J] = 1 。 42 ながら(!q.empty()) 43 { 44 ノード今= q.front()。 45 INT X = now.x。 46 のint yは= now.y。 47 のために(int型のk = 0 ; K < 4 ; K ++ ) 48 { 49 であれば((X + DIR [K] [ 0 ])> 0 &&(X + DIR [K] [ 0 ] <= N)&&(Y + DIR [ K] [ 1 ]> 0)&&(Y + DIR [K] [ 1 ] <= M)) 50 { 51 であれば(ブッシュ(X + DIR [K] [ 0 ]、Y +のDIR [K] [ 1 ] )) 52 { 53 ノードの次のノード=(X + DIR [K] [ 0 ]、Y +のDIR [K] [ 1 ])。 54 (次の)q.push。 55 VIS [X + DIR [K] [ 0 ] [Y + DIR [K] [ 1 ] = 1 。 56 } 57 } 58 } 59 q.pop()。 60 } 61 カウント++ 。 62 } 63 } 64 COUT << 数えます。 65 リターン 0 ; 66 }