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 .
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!