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
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 zona3:
#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;
}
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 #1576 zona3
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1576 zona3 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!