diff --git a/libs/jogador.c b/libs/jogador.c index 33ee8cec874a5250f5fbd75192bd1ef21dd6728e..2110ad531972b670fcabc9d4346994f1ef04e465 100644 --- a/libs/jogador.c +++ b/libs/jogador.c @@ -6,9 +6,10 @@ #include "grafo.h" Lista Joga(Grafo g, Lista grupo){ - //TODO: A Logica toda do jogo vai ficar aqui + //TODO: A Logica toda do jogo vai ficar aqui // Pega os filhos do grupo + Lista filhos = filhosGrupo(grupo); // Monta a árvore de busca: // - RAIZ: grupo // - FILHOS: Cores alcancáveis a partir da raiz @@ -19,5 +20,20 @@ Lista Joga(Grafo g, Lista grupo){ // - Em caso de empate da soma peso + bônus: // - Escolher o filho que tem mais netos da mesma cor de um filho // Após escolher um filho, repete o algoritmo até não terem mais filhos do grupo + + // Limpa as coisas + destroiLista(filhos, NULL); return constroiLista(); } + +Lista filhosGrupo(Lista l) { + Lista filhos = constroiLista(); + for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) { + Vertice pai = (Vertice) getConteudo(n); + for(No m = primeiroNoLista(pai->filhos); m; m = getSucessorNo(m)) { + Vertice filho = (Vertice) getConteudo(m); + insereUnicoLista(filho, filhos); + } + } + return filhos; +} diff --git a/libs/jogador.h b/libs/jogador.h index 1dd92d0f6b3aa04a010dbd3fe9856f657ede4c42..ec8ae9ae0988e8b11551745b40f799c244481115 100644 --- a/libs/jogador.h +++ b/libs/jogador.h @@ -1,6 +1,7 @@ #ifndef _PLAYER_ #define _PLAYER_ #include <stdbool.h> +#include "vertice.h" #include "grafo.h" #include "lista.h" @@ -8,4 +9,6 @@ // até consumir todos os vértices do grafo. Retorna a lista de jogadas Lista Joga(Grafo g, Lista grupo); +// Retorna todos os filhos de uma lista de vértices +Lista filhosGrupo(Lista l); #endif