Saltar al contenido

Rotar matriz M*N (90 grados)

Si hallas algún fallo en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.

Solución:

Si su matriz está representada por un array matrix[i, j]donde el i son las filas y las j son las columnas, luego implemente el siguiente método:

static int[,] RotateMatrixCounterClockwise(int[,] oldMatrix)

    int[,] newMatrix = new int[oldMatrix.GetLength(1), oldMatrix.GetLength(0)];
    int newColumn, newRow = 0;
    for (int oldColumn = oldMatrix.GetLength(1) - 1; oldColumn >= 0; oldColumn--)
    
        newColumn = 0;
        for (int oldRow = 0; oldRow < oldMatrix.GetLength(0); oldRow++)
        
            newMatrix[newRow, newColumn] = oldMatrix[oldRow, oldColumn];
            newColumn++;
        
        newRow++;
    
    return newMatrix;

Esto funciona para matrices de todos los tamaños.

Editar: Si esta operación es demasiado costosa, entonces se podría intentar cambiar la forma en que uno lee la matriz en lugar de cambiar la matriz sí mismo. Por ejemplo, si estoy mostrando la matriz de la siguiente manera:

for (int row = 0; row < matrix.GetLength(0); row++)

    for (int col = 0; col < matrix.GetLength(1); col++)
    
        Console.Write(matrix[row, col] + " ");
    

    Console.WriteLine();

entonces podría representar una rotación de 90 grados en sentido antihorario cambiando la forma en que leo la matriz:

for (int col = matrix.GetLength(1) - 1; col >= 0; col--)

    for (int row = 0; row < matrix.GetLength(0); row++)
    
        Console.Write(matrix[row, col] + " ");
    

    Console.WriteLine();

Este patrón de acceso también podría abstraerse en una clase.

Si haces scroll puedes encontrar los informes de otros usuarios, tú de igual manera tienes la opción de mostrar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *