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

Add um monte de coisas

parent bb1bdfc1
Branches
No related tags found
No related merge requests found
Pipeline #
...@@ -19,8 +19,8 @@ Vertice insereVertice(Grafo g, Vertice v) { ...@@ -19,8 +19,8 @@ Vertice insereVertice(Grafo g, Vertice v) {
} }
void criaArco(Vertice v, Vertice w) { void criaArco(Vertice v, Vertice w) {
insereLista(w, v->filhos); insereUnicoLista(w, v->filhos);
insereLista(v, w->pais); insereUnicoLista(v, w->pais);
} }
void tabuleiroParaGrafo(Tblr t, Grafo g) { void tabuleiroParaGrafo(Tblr t, Grafo g) {
......
...@@ -8,7 +8,7 @@ struct Lista { ...@@ -8,7 +8,7 @@ struct Lista {
unsigned int tamanho; unsigned int tamanho;
int padding; // só pra evitar warning int padding; // só pra evitar warning
No primeiro; No primeiro, ultimo;
}; };
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// devolve o número de nós da Lista l // devolve o número de nós da Lista l
...@@ -34,6 +34,7 @@ Lista constroiLista(void) { ...@@ -34,6 +34,7 @@ Lista constroiLista(void) {
return NULL; return NULL;
l->primeiro = NULL; l->primeiro = NULL;
l->ultimo = NULL;
l->tamanho = 0; l->tamanho = 0;
return l; return l;
...@@ -76,6 +77,31 @@ int destroiLista(Lista l, int destroi(void *)) { ...@@ -76,6 +77,31 @@ int destroiLista(Lista l, int destroi(void *)) {
// ou NULL em caso de falha // ou NULL em caso de falha
No insereLista(void *conteudo, Lista l) { No insereLista(void *conteudo, Lista l) {
No novo = criaNo();
if ( ! novo )
return NULL;
setConteudo(novo, conteudo);
++l->tamanho;
if(l->tamanho == 1) {
l->primeiro = novo;
}
if(l->ultimo) {
setSucessorNo(l->ultimo, novo);
}
l->ultimo = novo;
return novo;
}
//---------------------------------------------------------------------------
// insere um novo nó na Lista l cujo conteúdo é p
//
// devolve o No recém-criado
// ou NULL em caso de falha
No insereUnicoLista(void *conteudo, Lista l) {
// Não insere se já estiver na lista // Não insere se já estiver na lista
for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) { for(No n = primeiroNoLista(l); n; n = getSucessorNo(n)) {
if(getConteudo(n) == conteudo) { if(getConteudo(n) == conteudo) {
...@@ -88,10 +114,16 @@ No insereLista(void *conteudo, Lista l) { ...@@ -88,10 +114,16 @@ No insereLista(void *conteudo, Lista l) {
return NULL; return NULL;
setConteudo(novo, conteudo); setConteudo(novo, conteudo);
setSucessorNo(novo, primeiroNoLista(l));
++l->tamanho; ++l->tamanho;
if(l->tamanho == 1) {
l->primeiro = novo;
}
if(l->ultimo) {
setSucessorNo(l->ultimo, novo);
}
l->ultimo = novo;
return l->primeiro = novo; return novo;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
......
...@@ -25,6 +25,15 @@ No primeiroNoLista(Lista l); ...@@ -25,6 +25,15 @@ No primeiroNoLista(Lista l);
// ou NULL em caso de falha // ou NULL em caso de falha
No insereLista(void *conteudo, Lista l); No insereLista(void *conteudo, Lista l);
//------------------------------------------------------------------------------
// insere um Novo nó na Lista l cujo conteúdo é p se p não estiver na lista
//
// devolve o No recém-criado
// ou NULL em caso de falha
No insereUnicoLista(void *conteudo, Lista l);
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// cria uma Lista vazia e a devolve // cria uma Lista vazia e a devolve
// //
......
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h>
#include "vertice.h" #include "vertice.h"
#include "lista.h" #include "lista.h"
...@@ -7,6 +8,7 @@ Vertice criaVertice() { ...@@ -7,6 +8,7 @@ Vertice criaVertice() {
v->cor = -1; v->cor = -1;
v->peso = 0; v->peso = 0;
v->grupo = false;
v->pais = constroiLista(); v->pais = constroiLista();
v->filhos = constroiLista(); v->filhos = constroiLista();
return v; return v;
......
#ifndef _VERTICE_ #ifndef _VERTICE_
#define _VERTICE_ #define _VERTICE_
#include "lista.h" #include "lista.h"
#include <stdbool.h>
struct Vertice { struct Vertice {
int cor; int cor;
int peso; int peso;
bool grupo;
Lista pais; Lista pais;
Lista filhos; Lista filhos;
}; };
......
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <stdbool.h>
#include <time.h> #include <time.h>
#include "libs/tabuleiro.h" #include "libs/tabuleiro.h"
#include "libs/no.h" #include "libs/no.h"
...@@ -20,11 +21,17 @@ int main() { ...@@ -20,11 +21,17 @@ int main() {
// Lista com o grupo inicial // Lista com o grupo inicial
Lista grupo = constroiLista(); Lista grupo = constroiLista();
insereLista(t->celulas[0]->vert, grupo); // A célula na posição 0 do array é a célula no canto superior esquerdo insereLista(t->celulas[0]->vert, grupo); // A célula na posição 0 do array é a célula no canto superior esquerdo
t->celulas[0]->vert->grupo = true;
// Desaloca lista do grupo
destroiLista(grupo, NULL);
// Desaloca tabuleiro // Desaloca tabuleiro
destroiTblr(t); destroiTblr(t);
// printf("Número de grupos: %d\n", tamanhoLista(g->vertices));
Lista jogadas = constroiLista();
destroiLista(jogadas, NULL);
// Desaloca lista do grupo
destroiLista(grupo, NULL);
// Desaloca grafo // Desaloca grafo
destroiGrafo(g); destroiGrafo(g);
return 0; return 0;
......
...@@ -7,7 +7,7 @@ tempo_max=10000 #10s ...@@ -7,7 +7,7 @@ tempo_max=10000 #10s
tams=(4 8 16 25 32 50 64 75 100 128) tams=(4 8 16 25 32 50 64 75 100 128)
# lista de cores # lista de cores
cores=(2 3 4 5 6 7 8 16 32) cores=(2 3 4 5 6 7 8 10)
#-- Cores do terminal #-- Cores do terminal
RED='\033[0;31m' RED='\033[0;31m'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment