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

Add função para calcular bonus

parent f7348d36
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -30,9 +30,9 @@ Lista Joga(Grafo g, Lista grupo){ ...@@ -30,9 +30,9 @@ Lista Joga(Grafo g, Lista grupo){
return jogadas; return jogadas;
} }
Lista filhosGrupo(Lista l) { Lista filhosGrupo(Lista grupoPai) {
Lista filhos = constroiLista(); Lista filhos = constroiLista();
for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) { for(No n = primeiroNoLista(grupoPai); n; n = getSucessorNo(n)) {
Vertice pai = (Vertice) getConteudo(n); Vertice pai = (Vertice) getConteudo(n);
for(No m = primeiroNoLista(pai->filhos); m; m = getSucessorNo(m)) { for(No m = primeiroNoLista(pai->filhos); m; m = getSucessorNo(m)) {
Vertice filho = (Vertice) getConteudo(m); Vertice filho = (Vertice) getConteudo(m);
...@@ -42,9 +42,21 @@ Lista filhosGrupo(Lista l) { ...@@ -42,9 +42,21 @@ Lista filhosGrupo(Lista l) {
return filhos; return filhos;
} }
Lista agrupaCores(Lista l) { int calculaBonus(Vertice v, Lista filhos) {
int bonus = 0;
for(No n = primeiroNoLista(v->filhos); n; n = getSucessorNo(n)) {
Vertice filho = getConteudo(n);
// Se o filho não está na lsita filhos e não está no grupo de vértices já consumidos
if(!pertenceLista(filho, filhos) && !filho->grupo) {
bonus += filho->peso;
}
}
return bonus;
}
Lista agrupaCores(Lista filhos) {
Lista agrupa = constroiLista(); Lista agrupa = constroiLista();
for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) { for(No n = primeiroNoLista(filhos); n; n = getSucessorNo(n)) {
Vertice v = (Vertice) getConteudo(n); Vertice v = (Vertice) getConteudo(n);
// Verifica se a cor já está na lista // Verifica se a cor já está na lista
bool estaNaLista = false; bool estaNaLista = false;
...@@ -53,6 +65,7 @@ Lista agrupaCores(Lista l) { ...@@ -53,6 +65,7 @@ Lista agrupaCores(Lista l) {
// Se está, soma o peso do vértice // Se está, soma o peso do vértice
if(w->cor == v->cor) { if(w->cor == v->cor) {
w->peso += v->peso; w->peso += v->peso;
w->bonus += calculaBonus(v, filhos);
estaNaLista = true; estaNaLista = true;
} }
} }
...@@ -61,6 +74,7 @@ Lista agrupaCores(Lista l) { ...@@ -61,6 +74,7 @@ Lista agrupaCores(Lista l) {
Vertice w = criaVertice(); Vertice w = criaVertice();
w->cor = v->cor; w->cor = v->cor;
w->peso = v->peso; w->peso = v->peso;
w->bonus = calculaBonus(v, filhos);
insereLista(w, agrupa); insereLista(w, agrupa);
} }
} }
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
Lista Joga(Grafo g, Lista grupo); Lista Joga(Grafo g, Lista grupo);
// Retorna todos os filhos de uma lista de vértices // Retorna todos os filhos de uma lista de vértices
Lista filhosGrupo(Lista l); 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 l); Lista agrupaCores(Lista filhos);
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment