8512@adku.com
Si te preguntan de un tablero de 6x6: 1262816 :D
Segundo el código; backtracking de toda la vida con una representación del estado lo más sencilla posible.
En C tiene los puntos claves son:
Definición de tablero:
typedef struct _State
{
int table[TABLE_SIZE][TABLE_SIZE];
int pos_x;
int pos_y;
} State;
Inicialización tablero:
void State_Init(State* s)
{
int i, j;
for(i = 0; i < TABLE_SIZE; i++)
for(j = 0; j < TABLE_SIZE; j++)
s->table[i][j] = EMPTY_SQUARE;
s->table[START_POS_Y][START_POS_X] = OCCUPIED_SQUARE;
s->pos_x = START_POS_X;
s->pos_y = START_POS_Y;
}
Recorrido del tablero:
int CalculatePaths(State* s)
{
int i, total = 0;
if(State_IsSolution(s))
{
return 1;
}
for(i = UP; i < NUMBER_OF_DIRECTIONS; i++)
{
if(State_CanMove(s, i))
{
State_Move(s, i);
total += CalculatePaths(s);
State_Unmove(s, i);
}
}
return total;
}
El resto del código no lo pongo para no enrollarme.
Oye Iván, sabia que eras un poco bobo pero esta vez te pasas:
¿Porqué me cuentas esto?
El post sólo pretende remarcar una idea que vengo teniendo en cabeza desde hace unos meses, resulta que el futuro de la informática es nuestro pasado.
Con 19 años hubiera tardado 20min. como mucho en resolver el problema, ahora con unos cuantos más y algún que otro año trabajando en el mundo de la consultoría en fin..es otra cosa.
Esos temarios de los que tanto nos quejamos, esas asignaturas que no "servían para nada" resulta que si hoy viviesemos en un país de primer orden tecnológico, y no en España, nos darían trabajos como ingenieros de software de primer nivel, no como consultores de servicio.
Lo dicho, con 19 años y por culpa de Oliverio 20 minutos como mucho.
PD: La solucion en C dada por Pablo Bravo, http://www.lowlevelsolutions.com/
PD(2): La solución en java merece un análisis y conclusiones aparte, otro día.