Introdução
Rotacionar um array bidimensional, ou matriz, é um problema comum em programação que pode surgir em diferentes aplicações, particularmente em gráficos computacionais e manipulação de dados. Neste post de blog, mergulharemos no processo de rotacionar uma matriz 4x4 em 90 graus no sentido horário.
Entendendo o Problema
Imagine que você tem um array bidimensional estruturado assim:
[1][2][3][4]
[5][6][7][8]
[9][0][1][2]
[3][4][5][6]
Após rotacionar esta matriz 90 graus no sentido horário, ela deve se transformar em:
[3][9][5][1]
[4][0][6][2]
[5][1][7][3]
[6][2][8][4]
Em termos práticos, cada elemento no array original se desloca para uma nova posição com base na rotação. Mas como implementamos isso em uma linguagem de programação como C#? Vamos dividir isso passo a passo.
Solução
Passo 1: Inicializar a Matriz
Primeiro, precisamos inicializar a matriz em nosso programa. Aqui está como você pode fazer isso:
int[,] array = new int[4,4] {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,0,1,2 },
{ 3,4,5,6 }
};
Passo 2: Criar uma Função para Rotacionar a Matriz
Em seguida, vamos criar uma função chamada RotateMatrix
que executa a rotação necessária. Esta função levará a matriz original e seu tamanho como parâmetros e retornará a matriz rotacionada.
Aqui está a implementação da função 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;
}
Passo 3: Explicação da Função
- Declaração da Matriz: Declaramos uma nova matriz
ret
do mesmo tamanho que a entrada. - Laços Aninhados: Usamos um laço aninhado para percorrer cada elemento da matriz.
- Lógica de Rotação: Para cada elemento na posição
(i, j)
, mapeamos para a nova posição(j, n - i - 1)
. Esta fórmula ajuda a rotacionar os elementos corretamente em 90 graus no sentido horário.
Passo 4: Testando a Função
Você pode testar a função chamando-a e imprimindo a matriz rotacionada:
int[,] rotated = RotateMatrix(array, 4);
Apenas certifique-se de implementar um método para imprimir a matriz para verificação.
Conclusão
Rotacionar um array bidimensional é uma tarefa simples uma vez que você entende o mapeamento dos índices. Embora a abordagem atual tenha uma complexidade de tempo de O(n^2), otimizar algoritmos para matrizes maiores (como 10000x10000) é uma discussão em andamento em algoritmos e estruturas de dados.
Agora você pode rotacionar qualquer array bidimensional em C# com confiança. Boa codificação!