Se te da el mapa de un laberinto, donde las casillas marcadas con un
‘#’ son paredes, y las marcadas con un ‘.’ son
espacios vacíos. Partiendo de una casilla inicial vacía
‘A’, se te pide que te muevas por el laberinto siguiendo el
siguiente proceso, conocido como DFS (Depth-First Search, o búsqueda en
profundidad):
‘AVANZAR’: Siempre que puedes, te mueves hacia
arriba (norte); si la casilla a la que te moverías es una pared, o
emphya la has visitado con anterioridad, entonces te mueves
hacia la derecha (este); si esto no es posible (por cualquiera de los
dos motivos anteriores) te mueves hacia abajo (sur); finalmente, si
tampoco es posible, te mueves hacia la izquierda (oeste).
‘RETROCEDER’: Si no puedes avanzar hacia ninguna
dirección, entonces retrocedes sobre tus pasos tantas veces como sea
necesario (incluyendo, si es necesario, hasta la casilla inicial) hasta
que sea posible volver a avanzar.
Se te pide que realices el proceso anterior sobre el mapa y que marques, para cada casilla (incluyendo la inicial), el número de pasos que llevas realizados cuando la visitas por primera vez (incluyendo los pasos en que retrocedes).
Para hacerlo, te resultará útil hacer un programa recursivo o bien
usar una estructura de datos como una pila (‘stack’), donde
puedes “apilar” los pasos que avanzas y “desapilar” cada paso que
retrocedes.
La entrada consiste de una línea con un número
,
seguido de
casos. Cada caso empieza con una línea con las dimensiones
(filas) y
(columnas) del mapa, seguida de
filas de
caracteres ‘#’ y ‘.’ con la descripción del
mapa, y un único carácter ‘A’ con la posición inicial.
Para cada caso, escribe el mapa usando exactamente
caracteres para cada casilla, donde
es el mínimo número de dígitos necesario para representar todos los
números de pasos que acabarás mostrando (por ejemplo, si alcanzas la
última casilla después de 103 pasos, enonces
).
Si la casilla es una pared, escribe ‘X’
veces; si la casillas está vacía pero no es posible llegar a ella,
escribe ‘.’
veces; de otro mod, escribe el número de pasos necesarios para llegar a
ella usando exactamente
dígitos (añade ceros a la izquierda si es necesario). Por último,
escribe un espacio entre cada par de casillas de la misma fila. Fíjate
en los ejemplos para salir de dudas.
Separa dos casos de pruebas con una línea con 3 asteriscos
(‘**’).
TestA:
Entradas con
y
,
y donde todas las casillas situadas en los bordes del mapa son paredes
(‘#’), como el Ejemplo 1.
TestB:
Entradas con y , con mapas de todo tipo, como el Ejemplo 2.
Input
5 6 6 ###### #.#..# #.#A.# ###.## #...## ###### 5 9 ######### #.......# ###.....# #.#.A#..# ######### 4 9 ######### #..###### ###...#A# ######### 7 9 ######### #....#..# #..#..#.# #...#.#.# #....#..# #.A.#...# ######### 5 10 ########## #.#..#.### #.##.A#..# #...#...## ##########
Output
## ## ## ## ## ## ## .. ## 01 02 ## ## .. ## 00 03 ## ## ## ## 07 ## ## ## 10 09 08 ## ## ## ## ## ## ## ## *** ## ## ## ## ## ## ## ## ## ## 25 24 19 02 03 04 05 ## ## ## ## 20 01 10 09 06 ## ## .. ## 21 00 ## 08 07 ## ## ## ## ## ## ## ## ## ## *** # # # # # # # # # # . . # # # # # # # # # . . . # 0 # # # # # # # # # # *** ## ## ## ## ## ## ## ## ## ## 15 04 05 06 ## .. .. ## ## 16 03 ## 07 08 ## .. ## ## 17 02 27 ## 09 ## .. ## ## 18 01 28 29 ## .. .. ## ## 19 00 31 ## .. .. .. ## ## ## ## ## ## ## ## ## ## *** ## ## ## ## ## ## ## ## ## ## ## .. ## 13 12 ## .. ## ## ## ## .. ## ## 11 00 ## 04 05 ## ## .. .. .. ## 01 02 03 ## ## ## ## ## ## ## ## ## ## ## ##
Input
1 9 18 ....#..#.......... ...#....###...###. ....####...##...#. ...#.......##..##. ..#....#...#..#..# ..#.A..#....##.... ..#......##.....#. #..#.#.....#...#.. ....#.......###...
Output
.. .. .. .. ## .. .. ## .. .. .. .. .. .. .. .. .. .. .. .. .. ## .. .. .. .. ## ## ## .. .. .. ## ## ## .. .. .. .. .. ## ## ## ## 07 08 09 ## ## .. .. .. ## .. .. .. .. ## 02 03 04 05 06 57 10 ## ## .. .. ## ## .. .. .. ## 84 01 76 75 ## 59 56 11 ## .. .. ## 20 21 ## .. .. ## 83 00 77 74 ## 60 55 12 13 ## ## 18 19 22 23 .. .. ## 82 79 78 73 72 61 ## ## 14 15 16 17 40 ## 24 ## .. .. ## 80 ## 94 71 62 63 64 ## 46 45 44 ## 28 25 .. .. .. .. ## 96 95 70 69 68 65 66 ## ## ## 30 27 26