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;       
}