...
 
Commits (1)
......@@ -346,10 +346,11 @@ ApNo geraArvore(int k, int cmd) {
// Fluxo do programa
//
ApNo escolheCor(ApNo n, int valor_pai) {
ApNo escolheCor(ApNo n, int valor_pai, int lvl) {
int i, k, maior, valor_filho;
ApNo maior_n, filho_n, tmp;
n->nivel = lvl;
n->valor = varreVizinhaca(&n->filtro, 0, 0, n->corAtual);
if (n->filhos[0] == NULL && n->filhos[1] == NULL)
......@@ -361,12 +362,14 @@ ApNo escolheCor(ApNo n, int valor_pai) {
for (i=0 ; i < (MC-1) ; ++i)
if ((i+1) != n->corAtual) {
n->filhos[i]->filtro = copiaFiltro(n->filtro);
tmp = escolheCor(n->filhos[i], n->valor);
tmp = escolheCor(n->filhos[i], n->valor, lvl+1);
n->filhos[i]->valor = tmp->valor;
n->filhos[i]->nivel = tmp->nivel;
if (maior < n->filhos[i]->valor) {
if ((maior < n->filhos[i]->valor) || ((maior == n->filhos[i]->valor) && (maior_n->nivel > n->filhos[i]->nivel))) {
maior = n->filhos[i]->valor;
maior_n = n->filhos[i];
maior_n->nivel = n->filhos[i]->nivel;
}
}
......@@ -423,7 +426,7 @@ int main(int argc, char **argv) {
iniciaAux (&arv->filtro, 0, 0, m.mapa[0][0], &arv->valor);
arv->valor = varreVizinhaca(&arv->filtro, 0, 0, m.mapa[0][0]);
test = escolheCor(arv, arv->valor);
test = escolheCor(arv, arv->valor, 1);
sequencia[fim++] = test->corAtual;
pintaMapa(test->corAtual);
......
......@@ -17,6 +17,7 @@ typedef struct no *ApNo;
typedef struct no {
int corAtual;
int valor;
int nivel;
tmapa filtro;
ApNo filhos[11];
} nodo;
......@@ -53,7 +54,7 @@ ApNo criaNodo (int, int);
ApNo geraArvore(int, int);
// Funções de fluxo
ApNo escolheCor(ApNo, int);
ApNo escolheCor(ApNo, int, int);
void liberaArvore (ApNo, ApNo);