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.