#ifndef _NODOS_H
#define _NODOS_H
#include "estado.h"
#include "operadores.h"
#define MAX_NUM_HIJOS NUM_OPERADORES
typedef int coste;
struct struct_listaHijos;
struct struct_nodoGrafo
{
estado* pestadoPuzzle;
coste costeRaizNodo;
coste costeNodoMeta;
struct struct_nodoGrafo *pnodoPadre;
struct struct_listaHijos *listaHijos;
};
struct struct_nodoLista
{
struct struct_nodoGrafo* pnodo;
struct struct_nodoLista* psiguiente;
};
struct struct_listaHijos
{
int numHijos;
struct struct_nodoGrafo* hijos[MAX_NUM_HIJOS]; /* Array de punteros */
};
struct struct_listaHijosSMA;
struct struct_nodoArbolSMA
{
estado* pestado;
coste costeG;
coste costeH;
coste costeF;
coste costeMinSucesoresOlvidados;
struct struct_nodoArbolSMA *padre;
struct struct_listaHijosSMA *listaHijos;
int sigSucesor;
bool vuelta;
};
struct struct_nodoListaSMA
{
struct struct_nodoArbolSMA* pnodo;
struct struct_nodoListaSMA* psiguiente;
};
struct struct_hijoSMA
{
bool repetido;
struct struct_nodoArbolSMA* nodo;
};
struct struct_listaHijosSMA
{
int numHijos;
struct struct_hijoSMA* hijos[MAX_NUM_HIJOS];
};
typedef struct struct_nodoGrafo nodoGrafo;
typedef struct struct_nodoLista nodoLista;
typedef struct struct_listaHijos listaHijos;
typedef struct struct_nodoArbolSMA nodoArbolSMA;
typedef struct struct_nodoListaSMA nodoListaSMA;
typedef struct struct_hijoSMA hijoSMA;
typedef struct struct_listaHijosSMA listaHijosSMA;
nodoGrafo* crearNodoGrafo(void);
void destruirNodoGrafo(nodoGrafo *);
nodoLista* crearNodoLista(void);
void destruirNodoLista(nodoLista *);
nodoArbolSMA* crearNodoArbolSMA (void);
void destruirNodoArbolSMA (nodoArbolSMA *p);
nodoListaSMA* crearNodoListaSMA (void);
void destruirNodoListaSMA (nodoListaSMA *p);
#endif
En este fichero tenemos todas las definiciones referentes a los nodos. El SMA* necesita campos específicos en sus nodos para realizar el proceso de búsqueda por lo que tiene su propia estructura de nodo. Los demás algoritmos (el A*, IDA* y DFID) emplean la misma estructura de nodos, que es la que explicamos a continuación.