Rezolvare completă PbInfo #1576 zona3

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 Adresa de email.

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!