Estado.c
#include <stdio.h>
#include <stdlib.h>
#include "puzzle.h"
#include "estado.h"
extern int nFilas, nColumnas;
estado* crearEstado(void)
{
estado* p;
int f;
p = (estado *)malloc(sizeof(estado));
if (p == NULL)
{
printf("crearEstado;No hay memoria\n");
exit(1);
}
p->tablero = (ficha **)malloc(nFilas*sizeof(ficha*));
for (f=0; f < nFilas; f++)
{
p->tablero[f] = (ficha *)malloc(nColumnas*sizeof(ficha));
if (p->tablero[f] == NULL)
{
printf("crearEstado;No hay memoria\n");
exit(1);
}
}
p->tablero[0][0] = 0;
return p;
}
void destruirEstado(estado* e)
{
int i;
for (i=0; i < nFilas; i++)
free (e->tablero[i]);
free(e->tablero);
free(e);
}
void copiarEstado(estado eorig,estado* pedest)
{
ficha** tablero;
int f;
tablero = pedest->tablero;
memcpy(pedest,&eorig,sizeof(estado));
for (f=0; f < nFilas; f++)
memcpy(tablero[f],eorig.tablero[f],nColumnas*sizeof(ficha));
pedest->tablero = tablero;
}
bool compararEstados(estado e1,estado e2)
{
int fila, col;
for (fila=0; fila < nFilas; fila++)
for (col=0; col < nColumnas; col++)
if (e1.tablero[fila][col] != e2.tablero[fila][col])
return FALSE;
return TRUE;
}