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