Cerința
Moș Crăciun locuiește la polul nord și pregătește cadouri pentru copii cuminți din clasele a X-a B și A, ajutat de mai mulți spiriduși. Datorită încălzirii globale, gheața se topește, formându-se mai multe banchize. Spiridușii care se află pe alte banchize decât Moș Crăciun nu-l mai pot ajuta pe acesta, spre disperarea generală.
Harta polului nord seamănă cu o matrice cu n
linii și m
coloane în care elementele pot avea următoarele valori:
0
– zonă cu apă, în care gheața s-a topit.1
– zonă cu gheață care face parte dintr-o banchiză. Două zone cu gheață fac parte din aceeași banchiză dacă se învecinează pe linie sau pe coloană.2
– zonă cu gheață în care se găsește Moș Crăciun.3
– zonă cu gheață în care se găsește un spiriduș
Scrieți un program care să determine câți spiriduși se află pe aceeași banchiză cu Moș Crăciun și îl pot ajuta în continuare să pregătească cadouri pentru copii cuminți din clasele a X-a B și A.
Date de intrare
Fișierul de intrare moscraciun.in
conține pe prima linie numerele n m
. Următoarele n
linii conțin câte m
elemente, 0
, 1
, 2
sau 3
, cu semnificația din enunț.
Date de ieșire
Fișierul de ieșire moscraciun.out
va conține pe prima linie numărul C
spiriduși de pe banchiza lui Moș Crăciun.
Restricții și precizări
1 ≤ n , m ≤ 100
Exemplu
moscraciun.in
4 6 1 1 3 0 3 0 0 0 1 0 1 1 1 3 2 0 0 0 0 3 0 1 3 1
moscraciun.out
3
#include <bits/stdc++.h> using namespace std; ifstream cin("moscraciun.in"); ofstream cout("moscraciun.out"); int a[102][102]; int fill(int i, int j) { int c = 0; if(a[i][j] == 3) c++; a[i][j] = 0; if(a[i-1][j]!=0) c += fill(i-1,j); if(a[i][j+1]!=0) c += fill(i,j+1); if(a[i+1][j]!=0) c += fill(i+1,j); if(a[i][j-1]!=0) c += fill(i,j-1); return c; } int main() { int n, m; cin >> n >> m; for(int i=0; i <= n + 1; i++) a[i][0] = a[i][m + 1] = 0; for(int j = 0; j <=m + 1; j++) a[0][j] = a[n + 1][j] = 0; for(int i=1; i <=n ;i++) for(int j=1; j<=m; j++) cin >> a[i][j]; for(int i = 1; i <= n; i++) for(int j = 1;j <= m; j++) if(a[i][j] == 2) cout << fill(i, j); return 0; }