Rezolvare completă PbInfo #1864 MosCraciun

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

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema MosCraciun:

#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("moscraciun.in");
ofstream fout("moscraciun.out");

int n,m, a[102][102];

const int dx[]={0 , 0 , 1 , -1}, dy[]={1 , -1 , 0 , 0};

int nr_spiridusi, //numarul de spiridusi 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 ++;
    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;
    fout.close();
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1864 MosCraciun

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1864 MosCraciun de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!