El burro de ajedrez P66799


Statement
 

pdf   zip

Tenemos una nueva ficha de ajedrez, semejante al caballo, pero que hace saltos extrañísimos: la llamamos “el burro”. En concreto, un burro puede hacer kk tipos de saltos distintos (x1,y1),,(xk,yk)(x_1, y_1), \ldots, (x_k, y_k), donde un salto de tipo (xi,yi)(x_i, y_i) indica que el burro puede desplazarse xix_i columnas a la derecha, y yiy_i filas hacia arriba. Los valores xix_i o yiy_i pueden ser negativos. Por ejemplo, un burro se movería igual que un caballo de ajedrez si tuviera k=8k=8 saltos de tipos (2,1),(1,2),(1,2),(2,1),(2,1),(1,2),(1,2),(2,1)(2,1), (1,2), (-1,2), (-2,1), (-2,-1), (-1,-2), (1,-2), (2,-1) Los movimientos del burro no tienen porque ser simétricos. Por ejemplo, si los saltos del burro fueran (2,1),(1,2),(1,2),(2,1)(-2,1), (-1,2), (1,2), (2,1) nuestra ficha sería un caballo que únicamente puede desplazarse hacia arriba (no podría retroceder).

Se te pide que escribas un programa que obtenga una secuencia de movimientos que permita desplazarse a un burro desde la casilla (ox,oy)(o_x, o_y) de un tablero n×nn\times n hasta la casilla (fx,fy)(f_x, f_y) (donde 1ox,fxn1\leq o_x, f_x\leq n representa una columna, de izquierda a derecha, y 1oy,fyn1\leq o_y, f_y\leq n representa una fila, de abajo a arriba). En concreto, se pide que retornes el mínimo número de movimientos necesarios, y la secuencia de movimientos con ese número mínimo que sea lexicográficamente menor, según los índices de los movimientos (es decir: que a la hora de escoger entre varios movimientos, que tenga preferencia el escoger un tipo de salto (xi,yi)(x_i, y_i) con la mínima ii posible).

Entrada

Un juego de pruebas está formado por un nombre indeterminado de casos. Cada caso empieza con una línea con los números nn (tamaño del tablero) y kk (número de tipos de saltos del burro). A continuación, kk líneas con los valores xi,yix_i, y_i del tipo de salto ii-ésimo del burro, para 1ik1\leq i \leq k. Finalmente, una línea con los valores ox,oy,fxo_x, o_y, f_x y fyf_y, separados por espacios. Entre dos casos se dejará una línea en blanco.

Salida

Para cada caso, escribe la secuencia de movimientos buscada. En concreto, escribe todas las casillas que ocupa el burro, y los índices de los saltos que realiza (sigue el formato de los ejemplos, donde Sii indica que el burro realiza un salto de tipo ii). Si no hubiera ninguna secuencia válida, escribe una línea con tres guiones (---). Escribe dos líneas en blanco después de cada uno de los casos (¡incluyendo el último!).

Pista

Haz un recorrido en anchura, escogiendo el orden correcto y recordando cómo has llegado a cada casilla del tablero.

Public test cases
  • Input

    8 8
    2 1
    1 2
    -1 2
    -2 1
    -2 -1
    -1 -2
    1 -2
    2 -1
    1 1 1 2
    
    8 8
    2 1
    1 2
    -1 2
    -2 1
    -2 -1
    -1 -2
    1 -2
    2 -1
    1 1 8 8
    

    Output

    (1,1)
    S1: (3,2)
    S3: (2,4)
    S6: (1,2)
    
    
    (1,1)
    S1: (3,2)
    S1: (5,3)
    S1: (7,4)
    S2: (8,6)
    S4: (6,7)
    S1: (8,8)
    
    
    
  • Input

    8 4
    2 1
    1 2
    -1 2
    -2 1
    4 1 4 8
    
    8 4
    2 1
    1 2
    -1 2
    -2 1
    4 8 4 8
    
    8 4
    2 1
    1 2
    -1 2
    -2 1
    4 8 4 1
    

    Output

    (4,1)
    S1: (6,2)
    S1: (8,3)
    S3: (7,5)
    S3: (6,7)
    S4: (4,8)
    
    
    (4,8)
    
    
    ---
    
    
    
  • Input

    8 2
    3 0
    -1 -1
    3 8 7 1
    
    8 2
    3 0
    -1 -1
    3 8 8 1
    

    Output

    ---
    
    
    (3,8)
    S1: (6,8)
    S2: (5,7)
    S1: (8,7)
    S2: (7,6)
    S2: (6,5)
    S2: (5,4)
    S1: (8,4)
    S2: (7,3)
    S2: (6,2)
    S2: (5,1)
    S1: (8,1)
    
    
    
  • Information
    Author
    Omer Giménez
    Language
    Spanish
    Official solutions
    C++
    User solutions
    C++