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ă, daca 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 matricea formată prin înlocuirea elementelor egale cu 1 cu numărul de elemente pe care îl are zona din care face parte elementul respectiv.

Răspuns :

Răspuns:

Explicație:

#include <fstream>

using namespace std;

ifstream in("zona3.in");

ofstream out("zona3.out");

int a[101][101],n,m,s;

void Fill(int i,int j)

{

       if(a[i][j]==-1)

       {

       a[i][j]=1;

       s++;

       Fill(i-1,j);

       Fill(i,j+1);

       Fill(i+1,j);

       Fill(i,j-1);

       }

   

}

void Fill2(int i,int j)

{

   if(a[i][j]==1)

   {

       a[i][j]=s;

       Fill2(i-1,j);

       Fill2(i,j+1);

       Fill2(i+1,j);

       Fill2(i,j-1);

       

   }

}

int main()

{

   in>>n>>m;

   int i,j;

   for(i=1;i<=n;i++)

       for(j=1;j<=m;j++)

     {

         in>>a[i][j];

         a[i][j]=-a[i][j];

     }

   for(i=1;i<=n;i++)

       for(j=1;j<=m;j++)

           if(a[i][j]==-1)

       {

           s=0;

           Fill(i,j);

           Fill2(i,j);

           

       }

   for(i=1;i<=n;i++)

   { for(j=1;j<=m;j++)

           out<<a[i][j]<<" ";

           out<<endl;

          }

   return 0;

}