¡Esta es una revisión vieja del documento!
Algo que es muy común es tener distintos tipos de movimientos más allá de ir a casillas adyacentes en un tablero. El ejemplo más típico es el movimiento del caballo en el ajedrez.
Un caballo puede moverse a otra casilla si el “camino” de casillas adyacentes para ir de una a la otra forma una L, donde el palito largo de la L tiene casillas y el corto tiene , como se ve en la siguiente figura:
Entonces, lo que vamos a hacer, es guardar en dos vectores, cuánto nos movemos en la dirección vertical y cuánto en la vertical, respectivamente. Es decir, vamos a tener vectores y que en la posición -ésima guarden cuántos nos movemos en y cuánto en , respectivamente (en general, el eje será el vertical, el de la primera coordenada en un vector de vectores). Y para simular las movidas desde la posición , haremos un for para cada movida e iremos a la posición del tablero, siempre y cuando no nos hayamos ido del límite del tablero.
Para el movimiento mencionado del caballo, empezando por el de “arriba a la derecha”, los vectores quedarían:
vector<int> dx = {-2, -1, 1, 2, 2, 1, -1, -2} vector<int> dy = {1, 2, 2, 1, -1, -2, -2, -1}