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