sábado, 13 de agosto de 2011

Mostrar Matriz Como Caracol

Una cosa es generar una matriz (array bidimensional) caracol y otra cosa es mostrar una matriz como caracol o en modo caracol, ya vimos como generar una matriz caracol anteriormente pues ahora mostraremos un array bidimensional en modo caracol.

Primero veamos como es una matriz cuadrada normal de dimensión 7:


Lo que queremos conseguir es mostrar lo siguiente:

25 18 19 26 33 32 31 24 17 10 11 12 13 20 27 34 41 40 39 38 37 30 23 16 9 2 3 4 5 6 7 14 21 28 35 42 49 48 47 46 45 44 43 36 29 22 15 8 1

Para ver como lo haremos veamos la misma matriz pero divida por secciones que mostraremos:


Entonces lo primero que tenemos que mostrar la casilla de en medio solo si la matriz es de dimensión impar, luego vamos por anillo por anillo, primero el anillo azul, empezando de los colores claros (18, 19, luego 26, 33 y así sucesivamente) hasta el color oscuro, luego vamos por el anillo verde y luego por el rojo.

De la misma manera que para generar la matriz caracol necesitamos 4 ciclos repetitivos automáticos (for's) para los cuatro lados, arriba, derecha, abajo, izquierda, en ese orden, pero ademas necesitamos un ciclo para los anillos que encierre a los cuatros ciclos anteriores, dicho ciclo se repetirá (si n es la dimensión) n/2 veces. Entonces nuestro algoritmo tendrá 5 for's  considerando también el caso especial para el numero de en medio solo si la matriz es de dimensión impar.

if (n % 2 == 1) {
    System.out.print(" " + M[n / 2 + 1][n / 2 + 1]);
}
for (int a = n / 2; a >= 1; a--) {
    for (int i = a + 1; i <= n - a + 1; i++) {
        System.out.print(" " + M[a][i]);
    }
    for (int i = a + 1; i <= n - a + 1; i++) {
        System.out.print(" " + M[i][n - a + 1]);
    }
    for (int i = n - a; i >= a; i--) {
        System.out.print(" " + M[n - a + 1][i]);
    }
    for (int i = n - a; i >= a; i--) {
        System.out.print(" " + M[i][a]);
    }
}

Como podemos ver el código es demasiado similar al de la generación, también podemos mostrarlas en otras formas caracol con pequeñas modificaciones, el algoritmo funciona para una matriz cuadrada de cualquier dimensión sea impar o par. ahora podemos descargarnos el codigo completo en java, tomar en cuenta que la matriz se empieza a almacenar desde la posición 1 en filas y columnas, pero ya saben se lo pude modificar para que empiece de 0.

4 comentarios:

Deja tu comentario, agradecimiento, sugerencia o critica.