Prácticas IA 96. n-Puzzle


 

#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.