¡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 3 casillas y el corto tiene 2, 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 dx y dy que en la posición i-ésima guarden cuántos nos movemos en x y cuánto en y, respectivamente (en general, el eje x será el vertical, el de la primera coordenada en un vector de vectores). Y para simular las movidas desde la posición (a,b), haremos un for para cada movida i e iremos a la posición (a+dx[i],b+dy[i]) 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}