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