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!