Fill cu coada
struct Coordonate
{
int linie, coloana;
};
Coordonate Q[100 * 100 + 1];
void Fill(int istart ,int jstart ,int v)
{
int st = 1 , dr = 0;
//initializare coada
dr ++;
Q[dr].linie = istart, Q[dr].coloana = jstart;
//marcare pozitie de start
A[istart][jstart] = v;
while(st <= dr) // cat timp coada este nevida
{
int i = Q[st].linie, j = Q[st].coloana; // determinam elementul de la inceputul cozii
for(int k = 0 ; k < 4 ; k ++)
{
int iv = i + di[k], jv = j + dj[k]; // coordonatele vecinului
if(iv >= 1 && iv <= n && jv >= 1 && jv <= m // element în matrice
&& A[iv][jv] != 1 // element liber
&& A[iv][jv] != v) // nemarcat
{
// marcam elementul vecin
A[iv][jv] = v;
// il adaugam in coada
dr ++;
Q[dr].linie = iv , Q[dr].coloana = jv;
}
}
st ++; // eliminam din coada
}
}