Sunteți pe pagina 1din 1

Algoritmul Fill – umplerea unei suprafețe

Algoritmul FILL realizează umplerea (colorarea) unei suprafeţe închise. Considerăm o matrice ale
cărei elemente pot avea una dintre valorile 1 şi 0 cu semnificaţia: 1 reprezintă un perete, iar 0 o zonă
liberă. Pornind dintr-o zonă de valoare 0, algoritmul trebuie să coloreze cu valoarea 2 toate celelalte
celule în care se poate ajunge mergând un număr finit de paşi pe direcţiile: sus, jos, stânga, dreapta.

Exemplu:
Dacă m=4, n=5, x=2, y=3 și matricea inițială are conținutul:
10000
01001
00100
11101
atunci se va obține matricea
12222
01221
00122
11121

Pentru simplitate, considerăm că matricea este bordată cu elemente a căror valoare este 1.

Algoritmul recursiv este următorul:


void umplere(int i, int j)
{ if (a[i][j]==0)
{
a[i][j]=2;
umplere(i+1,j);
umplere(i,j-1);
umplere(i-1,j);
umplere(i,j+1);
}
}
Aplicație: Scrieți programul complet de rezolvare a problemei. Datele se citesc din fișierul fill.in care
conține pe prima linie 4 numere m, n, x și y reprezentând numărul de linii, numărul de coloane și
coordonatele punctului din care se pleacă, iar pe următoarele m linii elementele unei matrici (formată din
0 și 1). Rezultatele se vor afișa în fișierul fill.out matricea obținută din cea inițială, prin înlocuirea cu 2 a
celulelor în care se poate ajunge pornind din punctul de coordonate (x,y).
Aplicații:
1. grupuri 1507, parcela 1369 – pbinfo.ro
2. foto – campion
3. ferma1
4. insule
5. zona
6. lacuri
7. rebus
8. fillmat
9. drenaj

S-ar putea să vă placă și