Introducción
Rotar un arreglo bidimensional, o matriz, es un problema común en programación que puede surgir en diferentes aplicaciones, particularmente en gráficos por computadora y manipulación de datos. En esta publicación del blog, profundizaremos en el proceso de rotar una matriz 4x4 90 grados en sentido horario.
Entendiendo el Problema
Imagina que tienes un arreglo bidimensional estructurado de la siguiente manera:
[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]
Después de rotar esta matriz 90 grados en sentido horario, debería transformarse en:
[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]
En términos prácticos, cada elemento en el arreglo original se desplaza a una nueva posición basada en la rotación. Pero, ¿cómo implementamos esto en un lenguaje de programación como C#? Desglosémoslo paso a paso.
Solución
Paso 1: Inicializar la Matriz
Primero, necesitamos inicializar la matriz en nuestro programa. Aquí te mostramos cómo hacerlo:
int[,] array = new int[4,4] {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,0,1,2 },
{ 3,4,5,6 }
};
Paso 2: Crear una Función para Rotar la Matriz
A continuación, crearemos una función llamada RotateMatrix
que realice la rotación requerida. Esta función tomará la matriz original y su tamaño como parámetros y devolverá la matriz rotada.
Aquí está la implementación de la función RotateMatrix
:
static int[,] RotateMatrix(int[,] matrix, int n) {
int[,] ret = new int[n, n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
ret[i, j] = matrix[n - j - 1, i];
}
}
return ret;
}
Paso 3: Explicación de la Función
- Declaración de la Matriz: Declaramos una nueva matriz
ret
del mismo tamaño que la entrada. - Bucles Anidados: Usamos un bucle anidado para recorrer cada elemento de la matriz.
- Lógica de Rotación: Para cada elemento en la posición
(i, j)
, lo mapeamos a la nueva posición(j, n - i - 1)
. Esta fórmula ayuda a rotar los elementos correctamente en 90 grados en sentido horario.
Paso 4: Prueba de la Función
Puedes probar la función llamándola e imprimiendo la matriz rotada:
int[,] rotated = RotateMatrix(array, 4);
Solo asegúrate de implementar un método para imprimir la matriz para la verificación.
Conclusión
Rotar un arreglo bidimensional es una tarea sencilla una vez que entiendes el mapeo de índices. Aunque el enfoque actual se ejecuta en una complejidad de tiempo de O(n^2), la optimización de algoritmos para matrices más grandes (como 10000x10000) es un debate en curso en algoritmos y estructuras de datos.
Ahora puedes rotar cualquier arreglo bidimensional en C# con confianza. ¡Feliz codificación!