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ăspunsuri la întrebare
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;
}