Conexión con interfaces


La solución del problema consta de dos partes separadas en varios ejecutables:

Entrada

El programa puzzle espera tres tipos de argumentos:

filas x columnas
    1 2 3
    4 5 6
    7 8 0

donde filas y columnas representan el número de filas y columnas. Esta lectura de los ficheros se realiza en la función leerEstadosIF que se encuentra en el fichero puzzle.c.

Salida

La salida depende de si se ha encontrado la solución o no.

      1. Nodos totales que es un entero.
      2. Máxima profundidad alcanzada que también es un entero.
      3. Nodos repetidos, un entero.
      4. Nodos generados, otro entero.
      5. Número de movimientos, entero.
      6. Tiempo de usuario gastado en segundos que es también un flotante con 3 decimales.

Esta solución se genera en la función main del fichero puzzle.c.

Modificaciones

Sobre este programa se pueden realizar variaciones sin tener que reescribirlo en su totalidad debido a su modularidad. Por ejemplo se pueden crear más interfaces con solo tener en cuenta las especificaciones dadas antes sobre la entrada y salida aunque lo más importante puede ser el realizar modificaciones para el uso de los algoritmos utilizados, ya sean el A*, el IDA*, el SMA* o el DFID, en la resolución de otros problemas. Los pasos podrían ser los siguientes:

  1. Lo primero es ver si la representación de los estados debe cambiar en cuyo caso tenemos que cambiar la definición de los mismos y las funciones de creación y destrucción de los mismos. Todo esto se encuentra en los ficheros estado.c y estado.h.
  2. Puede que la representación de los estados no la haya que cambiar pero, en cambio, pueden existir nuevos operadores. La definición de éstos y su estructuración se encuentran en los ficheros operadores.c y operadores.h y su integración en el proceso de búsqueda se encuentra en la definición del array de operadores por lo que sólo habría que definir los nuevos operadores, introducirlos en el vector de operadores y variar la definición del máximo número de operadores.
  3. También puede haber que definir nuevas heurísticas lo que se puede hacer de forma similar a la definición de nuevos operadores salvo que éstas se encuentran en heuristica.c.html y heuristica.h.html y la definición del vector de heurísticas se encuentra también en busqueda.c.