Skip to content
Snippets Groups Projects
Commit d24a36f2 authored by Vytor Calixto's avatar Vytor Calixto :space_invader:
Browse files

Add mais bonus para cores em sua última jogada

parent d9771a17
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -81,14 +81,14 @@ Proposed solution: give a **HUGE** bonus to a group that is the last group of th ...@@ -81,14 +81,14 @@ Proposed solution: give a **HUGE** bonus to a group that is the last group of th
Our code gave the sequence: Our code gave the sequence:
``` ```
93 86
2 1 3 6 2 4 1 2 4 5 4 6 4 3 1 4 5 3 6 2 3 4 1 6 3 2 5 4 6 2 1 6 3 4 2 1 5 6 3 4 2 5 6 4 1 2 4 6 3 5 1 3 2 6 1 4 5 3 2 6 4 5 1 3 6 4 2 5 1 3 2 6 4 5 1 2 4 1 5 3 6 1 2 4 5 2 3 6 5 1 4 3 6 2 1 3 6 2 4 1 2 4 5 4 6 1 4 3 2 1 4 5 3 6 2 5 4 6 2 5 3 1 4 6 3 2 4 5 1 3 6 4 2 5 1 6 4 2 1 3 6 4 2 5 1 3 2 6 4 1 3 5 4 2 6 3 5 1 4 6 2 5 3 1 4 5 6 2 1 4 3 2 1 4 3 5 6 2 1
``` ```
**Test 6- 100 100 6 2** **Test 6- 100 100 6 2**
Our code gave the sequence: Our code gave the sequence:
``` ```
191 186
5 2 1 5 3 2 4 1 4 2 3 1 4 5 6 4 2 1 6 3 2 5 4 1 6 2 3 1 5 4 6 2 3 4 6 5 1 2 6 4 3 5 1 3 4 6 1 2 5 3 4 1 2 6 5 4 1 2 3 5 6 1 4 2 3 5 6 2 4 1 5 3 2 4 6 5 1 2 3 4 5 2 6 1 3 4 5 2 6 1 3 4 5 2 1 3 6 4 1 5 2 6 3 1 4 2 5 6 1 4 2 3 5 6 4 1 2 3 6 5 4 1 3 6 2 4 5 3 1 6 5 4 2 3 1 6 5 4 3 2 1 6 4 5 3 1 6 2 4 5 1 3 4 2 6 3 4 6 1 5 2 3 1 6 4 5 2 6 3 4 1 2 5 4 6 3 1 2 5 1 3 4 6 2 5 3 4 1 6 2 3 5 2 1 5 3 2 4 1 4 2 3 1 4 5 6 4 1 2 3 6 4 2 5 1 3 6 2 4 5 1 3 4 6 5 2 4 1 3 6 2 5 1 3 4 2 6 1 5 4 3 2 5 6 1 4 3 2 5 6 1 4 3 2 5 4 1 6 2 5 3 1 4 2 6 5 3 1 2 4 6 3 5 4 1 2 6 5 3 2 4 1 5 6 3 2 4 5 1 3 6 2 4 1 5 6 2 3 1 4 2 5 6 1 3 4 5 6 2 1 4 5 3 6 1 4 2 3 5 6 1 2 4 3 1 6 5 2 4 1 3 2 5 6 4 1 3 6 5 2 4 1 3 6 5 4 2 6 1 5 4 3 6 2 1 3 5 1 4 2 3 1 5 3 4 6 2 5 3 5 1 6 4 2 1 3 6
``` ```
...@@ -17,7 +17,7 @@ Lista Joga(Grafo g, Lista grupo){ ...@@ -17,7 +17,7 @@ Lista Joga(Grafo g, Lista grupo){
// - FILHOS: Cores alcancáveis a partir da raiz // - FILHOS: Cores alcancáveis a partir da raiz
// - NETOS: Cores alcançáveis a partir dos filhos que NÃO são alcançáveis a partir da raiz // - NETOS: Cores alcançáveis a partir dos filhos que NÃO são alcançáveis a partir da raiz
// Só é necessário para calcular o bônus de cada filho // Só é necessário para calcular o bônus de cada filho
Lista coresFilhos = agrupaCores(filhos); Lista coresFilhos = agrupaCores(filhos, g);
// Seleciona o melhor filho baseado em peso(filho) + bônus(filho) // (filho com a maior soma de filho e peso) // Seleciona o melhor filho baseado em peso(filho) + bônus(filho) // (filho com a maior soma de filho e peso)
// O bônus é calculado da seguinte forma: // O bônus é calculado da seguinte forma:
// - Soma o valor de cada neto (que não é alcançável pela raiz) // - Soma o valor de cada neto (que não é alcançável pela raiz)
...@@ -75,7 +75,7 @@ Lista filhosGrupo(Lista grupoPai) { ...@@ -75,7 +75,7 @@ Lista filhosGrupo(Lista grupoPai) {
return filhos; return filhos;
} }
Lista agrupaCores(Lista filhos) { Lista agrupaCores(Lista filhos, Grafo g) {
Lista agrupa = constroiLista(); Lista agrupa = constroiLista();
for(No n = primeiroNoLista(filhos); n; n = getSucessorNo(n)) { for(No n = primeiroNoLista(filhos); n; n = getSucessorNo(n)) {
Vertice v = (Vertice) getConteudo(n); Vertice v = (Vertice) getConteudo(n);
...@@ -100,6 +100,23 @@ Lista agrupaCores(Lista filhos) { ...@@ -100,6 +100,23 @@ Lista agrupaCores(Lista filhos) {
} }
} }
// Depois de agrupar, verifica se algum grupo vai chegar ao fim nesta jogada
for(No n = primeiroNoLista(agrupa); n; n = getSucessorNo(n)) {
Vertice v = (Vertice) getConteudo(n);
int somaCor = 0;
for(No m = primeiroNoLista(g->vertices); m; m = getSucessorNo(m)) {
Vertice w = (Vertice) getConteudo(m);
if(!w->grupo && w->cor == v->cor) {
somaCor += w->peso;
}
}
// Se a soma de todos os vértices que não pertencem ao grupo for igual
// ao peso do vértice agrupado, esta é a última jogada com aquela cor
if(v->peso == somaCor) {
v->bonus += 100; // Mais bonus para que essa cor seja a escolhida
}
}
return agrupa; return agrupa;
} }
......
...@@ -13,7 +13,7 @@ Lista Joga(Grafo g, Lista grupo); ...@@ -13,7 +13,7 @@ Lista Joga(Grafo g, Lista grupo);
Lista filhosGrupo(Lista grupoPai); Lista filhosGrupo(Lista grupoPai);
// Retorna uma lista de vértices com as cores e pesos agrupadas a partir de l // Retorna uma lista de vértices com as cores e pesos agrupadas a partir de l
Lista agrupaCores(Lista filhos); Lista agrupaCores(Lista filhos, Grafo g);
int calculaBonus(Vertice v, Lista filhos); int calculaBonus(Vertice v, Lista filhos);
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment