# PBinfo #4543 – MosCraciun4 – Rezolvare C++

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

## Enunț

Cerința
Moș Crăciun locuiește la polul nord și pregătește cadouri pentru copii cuminți din clasa a X-a A, ajutat de mai mulți spiriduși buni și deranjat de mai mulți spiriduși ră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 sau deranja pe acesta, spre disperarea/încântarea 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ș bun
4 – zonă cu gheață în care se găsește un spiriduș rău

Scrieți un program care să determine câți spiriduși buni și câți spiriduși răi se află pe aceeași banchiză cu Moș Crăciun și îl pot ajuta/deranja în continuare să pregătească cadouri pentru copii cuminți din clasa a X-a A.

Date de intrare
Fișierul de intrare moscraciun4.in conține pe prima linie numerele n m. Următoarele n linii conțin câte m elemente, 0, 1, 2, 3 sau 4, cu semnificația din enunț.

Date de ieșire
Fișierul de ieșire moscraciun4.out va conține pe prima linie numerele B R, separate printr-un spațiu, reprezentând numărul de spiriduși buni și numărul de spiriduși răi de pe banchiza lui Moș Crăciun.

Restricții și precizări

1 ≤ n , m ≤ 100

Exemplu:
moscraciun4.in

4 6
4 1 3 0 3 0
0 0 1 0 1 4
1 3 2 0 0 0
0 3 0 1 3 1
moscraciun4.out

3 1
Explicație 
Pe banchiza lui Moș Crăciun se află 3 spiriduși buni și un spiriduș rău.

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("moscraciun4.in");
ofstream fout("moscraciun4.out");
int n,m, a[102][102];
const int dx[]={0 , 0 , 1 , -1}, dy[]={1 , -1 , 0 , 0};
int nr_spiridusi_buni, nr_spiridusi_rai, //numarul de spiridusi buni/rai de pe banchiza lui Mos Craciun
    imc, jmc; // coordonatele lui Mos Craciun
void fill(int i , int j)
{
    if(a[i][j] == 3)
        nr_spiridusi_buni ++;
    if(a[i][j] == 4)
        nr_spiridusi_rai ++;
    a[i][j] = -1;
    for(int k = 0 ; k < 4 ; k ++)
        if(a[i+dx[k]][j+dy[k]] > 0)
            fill(i+dx[k] , j+dy[k]);
}
int main(){
    fin >> n >> m;
    for(int i = 1 ; i <= n ; i ++)
        for(int j = 1 ; j <= m ; j ++)
        {
            fin >> a[i][j];
            if(a[i][j] == 2)
                imc = i, jmc = j;
        }
    fin.close();
    //facem fill din pozitia initiala a lui Mos Craciun
    fill(imc ,jmc);
    fout << nr_spiridusi_buni << " " << nr_spiridusi_rai;
    fout.close();
    return 0;
}
```

## Resurse

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