diff --git a/tp4/lib_conjunto.c b/tp4/lib_conjunto.c index 9bc64e231aeb3fafba4b1c451107676d1df605af..c5416dfffe5b3fa037088a4c6f387826630bf1b8 100644 --- a/tp4/lib_conjunto.c +++ b/tp4/lib_conjunto.c @@ -138,23 +138,30 @@ conjunto_t *uniao_cjt(conjunto_t *c1, conjunto_t *c2) { conjunto_t **menor_cjt = cardinalidade_cjt(c1) < cardinalidade_cjt(c2) ? &c1 : &c2; conjunto_t **maior_cjt = cardinalidade_cjt(c1) > cardinalidade_cjt(c2) ? &c1 : &c2; - while (c1->ptr < cardinalidade_cjt(c1) && c2->ptr < cardinalidade_cjt(c2)) { - if (c1->v[c1->ptr] == c2->v[c2->ptr]) { - insere_cjt(uniao, c1->v[c1->ptr]); - c1->ptr++; - c2->ptr++; - } else { - if (c1->v[c1->ptr] < c2->v[c2->ptr]) { - insere_cjt(uniao, c1->v[c1->ptr]); - c1->ptr++; - } else { - insere_cjt(uniao, c2->v[c2->ptr]); - c2->ptr++; - } - } - } + /* while (c1->ptr < cardinalidade_cjt(c1) && c2->ptr < cardinalidade_cjt(c2)) { */ + /* if (c1->v[c1->ptr] == c2->v[c2->ptr]) { */ + /* insere_cjt(uniao, c1->v[c1->ptr]); */ + /* c1->ptr++; */ + /* c2->ptr++; */ + /* } else { */ + /* if (c1->v[c1->ptr] < c2->v[c2->ptr]) { */ + /* insere_cjt(uniao, c1->v[c1->ptr]); */ + /* c1->ptr++; */ + /* } else { */ + /* insere_cjt(uniao, c2->v[c2->ptr]); */ + /* c2->ptr++; */ + /* } */ + /* } */ + /* } */ + + /* TODO: arrumar isso aqui de cima ^ e apagar isso aqui de baixo v */ int i; + for (i = 0; i < cardinalidade_cjt(*menor_cjt); i++) { + insere_cjt(uniao, c1->v[i]); + insere_cjt(uniao, c2->v[i]); + } + for (i = cardinalidade_cjt(*menor_cjt); i < cardinalidade_cjt(*maior_cjt); i++) { insere_cjt(uniao, (*maior_cjt)->v[i]); } diff --git a/tp4/tp4 b/tp4/tp4 index 3368d0f7bc516f8fba91116e43a75ad81f92b3a1..0487535f0ba3e7e14013526730e2a1787577a66d 100755 Binary files a/tp4/tp4 and b/tp4/tp4 differ diff --git a/tp4/tp4.c b/tp4/tp4.c index b4c89eec0ba719663aed05107abf46085439c8ce..9f4e3ec54f31e1416c2a7ce6719baa9283020406 100644 --- a/tp4/tp4.c +++ b/tp4/tp4.c @@ -23,7 +23,7 @@ conjunto_t **le_vetor_conjuntos(int *tam, int max) { int n, m; scanf("%d", &n); while (n) { - if ( !(vetor_c[*tam] = cria_cjt(10)) ) + if ( !(vetor_c[*tam] = cria_cjt(15)) ) return NULL; insere_cjt(vetor_c[*tam], n); scanf("%d", &m); @@ -47,7 +47,7 @@ conjunto_t **libera_vetor_conjuntos(conjunto_t **vetor_c, int tam) { conjunto_t *acha_solucao(conjunto_t **herois, conjunto_t *missao, conjunto_t **equipes, int tam_equipes) { conjunto_t *menor; - menor = cria_cjt(10); + menor = cria_cjt(15); conjunto_t *uniao_old; conjunto_t *uniao; int i, j; @@ -59,8 +59,8 @@ conjunto_t *acha_solucao(conjunto_t **herois, conjunto_t *missao, conjunto_t **e uniao_old = uniao; uniao = uniao_cjt(uniao, herois[equipes[i]->v[j] - 1]); uniao_old = destroi_cjt(uniao_old); - } /* realiza a uniao de todos os conjuntos de habilidades de heroi referenciados no conjunto equipe da posicao atual do vetor de equipes. */ + } if (contido_cjt(missao, uniao)) { if (vazio_cjt(menor) || cardinalidade_cjt(equipes[i]) < cardinalidade_cjt(menor)) { menor = destroi_cjt(menor);