Tarea 8 de Análisis y Diseño de Algoritmos

Trimestre 2014 Invierno
Entrega: 7 de marzo de 2014 a las 22:00.

Imagina que hay nueve relojes en una matriz 3*3 como se muestra en la figura 1.
|-------|    |-------|    |-------|    
|       |    |       |    |   |   |    
|---O   |    |---O   |    |   O   |          
|       |    |       |    |       |           
|-------|    |-------|    |-------|    
    A            B            C

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O   |    |   O   |
|   |   |    |   |   |    |   |   |
|-------|    |-------|    |-------|
    D            E            F

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O---|    |   O   |
|   |   |    |       |    |   |   |
|-------|    |-------|    |-------|  (Figura 1)
    G            H            I
El objetivo es llevar todas las manecillas a las 12 en punto. Hay nueve maneras distintas de mover las manecillas en los relojes. Cada una de estas maneras se llama movimiento. Cada movimiento tiene asignado un número fijo del 1 al 9. Cada movimiento girará 90° (en el sentido de las agujas del reloj) las manecillas de los relojes indicados en la figura 2.
Mov   Relojes afectados
 
 1         ABDE
 2         ABC
 3         BCEF
 4         ADG
 5         BDEFH
 6         CFI
 7         DEGH
 8         GHI
 9         EFHI    (Figura 2)
Datos de Entrada: Lea nueve números. Estos números dan las posiciones iniciales de las manecillas: 0 = 12 en punto 1 = 3 en punto 2 = 6 en punto 3 = 9 en punto.

Datos de Salida: Escriba una secuencia de movimientos (números) de longitud mínima N, que ponga todas las manecillas a las 12 en punto. En caso de que haya varias soluciones, solamente se requiere una.

Escriba un programa llamado relojesZZ (donde ZZ es una clave de dos dígitos asignada por el profesor) que implemente tu algoritmo. Para el ejemplo de abajo, la longitud mínima es 4 movimientos que se pueden hacer como sigue:
3 3 0         3 0 0         3 0 0          0 0 0         0 0 0 
2 2 2   5->   3 3 3   8->   3 3 3   4 ->   0 3 3   9->   0 0 0 
2 1 2         2 2 2         3 3 3          0 3 3         0 0 0 
Ejemplo de entrada
Ejemplo de salida
3 3 0
2 2 2
2 1 2
4
5 8 4 9

Notas: Sus programas no deben leer ni escribir nada adicional a lo que se indica en el enunciado. El tiempo de ejecución de sus algoritmos será considerado como parte de la evaluación.