#include "colorir.h" void Pinta(MatrizL *m, int pos, int cor){ Fila *f; int i,j, l,c; f = filCria(); /* Poe elemento na fila para poder entrar no while */ filInsere(&f,pos); while ( ! filVazia(f) ) { pos = filRemove(&f); m->info[pos] = cor; i = matlLin(m,pos); j = matlCol(m,pos); for ( l=-1; l < 2; l++ ) for ( c=-1; c < 2; c++) { /* Redefine nova posicao */ pos = matlInd(m, i+l, j+c); if ( (((i+l)>=0) && ((i+l) < m->nl)) /* Esta dentro de uma linha valida? */ && (((j+c)>=0) && ((j+c) < m->nc)) /* Esta dentro de uma coluna valida? */ && (m->info[pos] == 1) /* O Elemento nao foi colorido */ && ( filBusca(f,pos) == NULL) /* O Elemento NAO existe na fila*/ ) filInsere(&f,pos); } } filDestroi(&f); } MatrizL *Colore(MatrizL *m1) { MatrizL *m; int cor = 2; int i,j; m = matlCria(m1->nl,m1->nc); /* duplicar m1 */ for (i=0; i < m1->nl*m1->nc; i++) m->info[i] = m1->info[i]; for (i=0; i < m->nl; i++) for (j=0; j < m->nc; j++) if ( m->info[matlInd(m,i,j)] == 1 ) { Pinta(m, matlInd(m,i,j), cor); cor++; } return m; } /* author: Gustavo Sverzut Barbieri (http://www.gustavobarbieri.com.br) */