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. 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 clasa a X-a 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
Răspunsuri la întrebare
Răspuns de
4
#include <iostream>
using namespace std;
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;
}
using namespace std;
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;
}
Utilizator anonim:
si asta tot 0 puncte da
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
Alte întrebări interesante
Biologie,
8 ani în urmă
Engleza,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă