# PBinfo #1576 – zona3 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Se consideră o matrice cu n linii și m coloane. Spunem că o poziție este liberă dacă elementul de pe linia i și coloana j este egal cu 0 și 1 în caz contrar. Spunem despre mai multe elemente ocupate că formează o zonă, dacă elementele se învecinează pe cele patru direcții (sus, jos, dreapta, stânga).

Calculați pentru fiecare zonă numărul de elemente și afișați noua matrice formată prin înlocuirea elementelor egale cu 1 cu numărul de elemente pe care îl are zona din care face parte elementul respectiv.

Date de intrare
De pe prima linie a fișierului zona3.in se citesc două numere naturale n și m. Următoarele n linii conțin câte m valori 0 sau 1.

Date de ieșire
Scrieți în fișierul zona3.out matricea care rezultă din operațiile specificate în cerință.

Restricții și precizări

2 ≤ n, m ≤ 100

Exemplu:
zona3.in

6 8
1 1 0 0 1 1 1 0
0 0 0 1 1 1 0 0
1 1 0 0 0 1 0 0
0 1 1 1 1 0 0 0
0 0 0 0 1 1 0 0
1 1 0 1 0 0 0 1
zona3.out

2 2 0 0 7 7 7 0
0 0 0 7 7 7 0 0
8 8 0 0 0 7 0 0
0 8 8 8 8 0 0 0
0 0 0 0 8 8 0 0
2 2 0 1 0 0 0 1
Explicație

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
ifstream f("zona3.in");
ofstream g("zona3.out");
int n,m,i,j,h,v[101][101],k[50000];
void bk(int i, int j) {
    k[h]++;
    v[i][j]=h;
    if (v[i-1][j]==1 && i-1>0) bk(i-1,j);
    if (v[i+1][j]==1 && i+1<=n) bk(i+1,j);
    if (v[i][j-1]==1 && j-1>0) bk(i,j-1);
    if (v[i][j+1]==1 && j+1<=m) bk(i,j+1);
}
int main()
{
    h=1;
    f>>n>>m;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            f>>v[i][j];
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            if (v[i][j]==1) {h++; bk(i,j);}
    for (i=1; i<=n; i++) {
        for (j=1; j<=m; j++)
            g<<k[v[i][j]]<<' ';
            g<<'\n';
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/1576)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/1576/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-1576/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
