some image

Codes and Tags

Recorriendo una matriz en Espiral

Etiquetas: , Blog, Programación No comments

Aunque este código no es tan común en algún momento podrá sacarnos de apuros. Basicamente el objetivo del algoritmo es hacer el recorrido de una matriz / arreglo bidimensional en espiral comenzando por la derecha y terminando al encontrar el último elemento de la matriz en el “centro”.

/**
 * Clase que se encarga de mostrar un ejemplo del recorrido en espiral de
 * una matriz / arreglo bidimensional
 *
 * http://codesandtags
 */

public class RecorridoEspiral {
	public static void main(String[] args) {
		// Declaracion del arreglo bidimensional : Cuadrado
		int[][] matriz = new int[6][6];

		// Lleno el arreglo
		for (int i = 0; i < matriz.length; i++) {
			for (int m = 0; m < matriz[0].length; m++) {
				matriz[i][m] = (int) (Math.random() * 100);
			}
		}

		// Lleno el arreglo
		System.out.println("Mostrando matriz : ");
		for (int i = 0; i < matriz.length; i++) {
			for (int m = 0; m < matriz[0].length; m++) {
				System.out.print(" " + matriz[i][m]);
			}
			System.out.println("");
		}

		int x = 0; //Para manejar las filas
		int y = 0; //Para manejar las columnas
		int flag = 0;  //Bandera para saber que recorrido se debe realizar
		int n = 0; //Contador de elementos
		//Total de elementos en la matriz
		int elementos = matriz.length * matriz[0].length;

		// Recorrido en espiral
		System.out.println("\nMostrando recorrido en espiral");
		while (n < elementos) {
			//System.out.println("\nFlag : " + flag);
			switch (flag) {
			case 0: // Recorrido de izquierda a derecha
				for (int m = x; m < matriz[0].length - y; m++) {
					System.out.print(" " + matriz[x][m]);
					n++;
				}
				flag++;
				break;

			case 1: //Recorrido de arriba abajo
				for (int m = x + 1; m < matriz.length - x; m++) {
					System.out.print(" " + matriz[m][matriz[0].length - 1 - y]);
					n++;
				}
				flag++;
				break;

			case 2: //Recorrido de derecha a izquierda
				for (int m = matriz[0].length - 2 - y; m >= y; m--) {
					System.out.print(" " + matriz[matriz.length - 1 - x][m]);
					n++;
				}
				flag++;
				break;

			case 3: //Recorrido de abajo a arriba
				for (int m = matriz.length - 2 - x; m >= x + 1; m--) {
					System.out.print(" " + matriz[m][y]);
					n++;
				}
				flag = 0;
				//Se aumentan las filas y las columnas para un subnivel en el espiral
				x++;
				y++;
				break;
			}	

		}

	}
}

Datos de salida

Tamano en X : 6
Tamano en Y : 6

Mostrando matriz :
 42 42 60 61 62 95
 69 43 61 81 92 55
 46 43 95 96 96 11
 17 80 58 63 43 73
 6 11 65 57 64 93
 67 49 60 23 27 88

Mostrando recorrido en espiral
 42 42 60 61 62 95 55 11 73 93 88 27 23 60 49 67 6 17 46 69 43 61 81 92 96 43 64 57 65 11 80 43 95 96 63 58

Otro ejemplillo

Tamano en X : 3
Tamano en Y : 8

Mostrando matriz :
 65 3 41 58 21 71 81 50
 43 54 64 56 86 44 1 16
 46 69 39 77 63 37 80 94

Mostrando recorrido en espiral
 65 3 41 58 21 71 81 50 16 94 80 37 63 77 39 69 46 43 54 64 56 86 44 1

About Edwin Torres

Related Posts

  • Logo Java
  • Logo Java
  • Logo Java
  • Logo Java

Add your comment