Operadores.c
#include "puzzle.h"
#include "estado.h"
#include "operadores.h"
extern nFilas, nColumnas;
estado* moverNorte(estado einicial)
{
estado *pefinal;
int filaEB = einicial.filaEspacioBlanco;
int colEB = einicial.colEspacioBlanco;
pefinal = crearEstado();
copiarEstado(einicial,pefinal);
pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB-1][colEB];
pefinal->tablero[filaEB-1][colEB] = VALOR_ESPACIO_BLANCO;
pefinal->filaEspacioBlanco = filaEB - 1;
return pefinal;
}
bool aplicableMoverNorte(estado e)
{
return (e.filaEspacioBlanco > 0) ;
}
estado* moverSur(estado einicial)
{
estado *pefinal;
int filaEB = einicial.filaEspacioBlanco;
int colEB = einicial.colEspacioBlanco;
pefinal = crearEstado();
copiarEstado(einicial,pefinal);
pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB+1][colEB];
pefinal->tablero[filaEB+1][colEB] = VALOR_ESPACIO_BLANCO;
pefinal->filaEspacioBlanco = filaEB + 1;
return pefinal;
}
bool aplicableMoverSur(estado e)
{
return (e.filaEspacioBlanco < (nFilas-1));
}
estado* moverOeste(estado einicial)
{
estado *pefinal;
int filaEB = einicial.filaEspacioBlanco;
int colEB = einicial.colEspacioBlanco;
pefinal = crearEstado();
copiarEstado(einicial,pefinal);
pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB][colEB-1];
pefinal->tablero[filaEB][colEB-1] = VALOR_ESPACIO_BLANCO;
pefinal->colEspacioBlanco = colEB - 1;
return pefinal;
}
bool aplicableMoverOeste(estado e)
{
return (e.colEspacioBlanco > 0) ;
}
estado* moverEste(estado einicial)
{
estado *pefinal;
int filaEB = einicial.filaEspacioBlanco;
int colEB = einicial.colEspacioBlanco;
pefinal = crearEstado();
copiarEstado(einicial,pefinal);
pefinal->tablero[filaEB][colEB] = pefinal->tablero[filaEB][colEB+1];
pefinal->tablero[filaEB][colEB+1] = VALOR_ESPACIO_BLANCO;
pefinal->colEspacioBlanco = colEB + 1;
return pefinal;
}
bool aplicableMoverEste(estado e)
{
return (e.colEspacioBlanco < (nColumnas-1)) ;
}