Sea un tablero de dimensiones MxN, 1<=M<=9, 1<=N<=9,
tal que cada casilla contenga una letra mayúscula. La casilla que está
en la fila m y la columna n la identificamos mediante (m,n). Dos casillas diferentes
(mi,ni) y (mj,nj) son adyacentes si se cumple:
- para la primera componente, |mi-mj|<=1 o |mi-mj|=M-1, y
- para la segunda componente, |ni-nj|<=1 o |ni-nj|=N-1.
Es decir, son adyacentes todas aquellas casillas que rodean a una dada, considerando
que en el tablero como si la última fila estuviera unida a la primera,
y lo mismo para las columnas. En el dibujo siguiente marcamos con un asterisco
las casillas adyacentes a las casillas (2,3) (a la izquierda) y (1,1) (a la
derecha) en un tablero 4x4:
. * * * . * . *
. * . * * * . *
. * * * . . . .
. . . . * * . *
Dada una palabra de k letras mayúsculas A=a1 a2 ... ak, k>=1, decimos
que A está contenida en el tablero si se cumple que:
- existe una casilla (m1,n1) que contiene la letra a1,
- para cada letra ai+1, 1<=i<k, existe una casilla (mi+1,ni+1) que contiene
ai+1 cumpliéndose que (mi,ni) y (mi+1,ni+1) son casillas adyacentes en
el tablero, y
- no existen dos casillas (mi,ni) y (mj,nj) iguales, 1<=i, j<=k.
A la secuencia de casillas (m1,n1), ..., (mk,nk) la llamamos el camino de A
en el tablero.
Así, dado el tablero 4x4 de la figura siguiente, las cadenas
"SOLA", "HOLA" y "ADIOS" están contenidas
en él, pero no sucede lo mismo con "GOZA", "HORA"
ni "HALA".
S H A Z
I O L G
E Z E F
O H D I
En el caso de "SOLA", las casillas que forman
su camino son (1,1), (2,2), (2,3) y (1,3). Para "HOLA", son (1,2),
(2,2), (2,3) y (1,3). Para "ADIOS", el camino es (1,3), (4,3), (4,4),
(4,1) y (1,1).
Dado un tablero de las características anteriormente descritas
y una palabra A compuesta por letras mayúsculas, se pide calcular el
camino de A. Al construir el programa, podéis suponer que A está
contenida en el tablero y que existe un único camino para ella.
Entrada
Residente en el fichero de caracteres "CAMI.DAT":
- Línea 1: valores de M y N (un carácter del '1' al '9') separados
por un único blanco
- Líneas de la 2 a la M+1 (la línea k representa la fila k-1 del
tablero): N caracteres, representando el contenido de la línea correspondiente
del tablero
- Línea M+2: p caracteres, M*N>=p>=1, que representa la palabra
a tratar.
Salida
A guardar en el fichero de caracteres "CAMI.OUT":
p líneas (una para cada letra de la palabra a tratar), siendo el contenido
de la línea k igual a la casilla que aparece en posición k dentro
del camino de la palabra, de esta forma:
carácter del '1' al '9' - blanco - carácter del '1' al '9'
Ejemplo de entrada
4 4
SHAZ
IOLG
EZEF
OHDI
SOLA
Ejemplo de salida
1 1
2 2
2 3
1 3 |