Aquí, construiremos un programa en C para rotar elementos de array con un enfoque para anular/rotar elementos de forma independiente.
Aporte:
1 2 3 4 5 6 7 8 9
Producción:
4 1 2 7 5 3 8 9 6
Acercarse
Giramos todos los anillos de elementos uno por uno. Este proceso comienza desde el anillo exterior y luego sigue el mismo paso para el anillo interior. Para rotar un anillo, necesitamos hacer los siguientes pasos.
- Mover elementos de la fila superior .
- Mover elementos de la última columna .
- Mover elementos de la fila inferior .
- Mover elementos de la primera columna .
- Repita los pasos anteriores para el anillo interior mientras haya un anillo interior.
Ejemplo:
C
// C program to demonstrate // rotation of a matrix elements #include <stdio.h> #define R 4 // macros #define C 4 // macros // function to rotate a matrix mat[][] of size m x n. // m = Row and n = Column void rotatematrix(int m, int n, int mat[R][C]) { int row = 0, col = 0; int prev, curr; /* row: Starting row index m: ending row index col: starting column index n: ending column index i: iterator */ while (row < m && col < n) { if (row + 1 == m || col + 1 == n) break; // Store the first element of next row and this // element will replace the first element of current // row prev = mat[row + 1][col]; // Move elements of first row from remaining rows for (int i = col; i < n; i++) { curr = mat[row][i]; mat[row][i] = prev; prev = curr; } row++; // Move the elements of last column from the // remaining columns for (int i = row; i < m; i++) { curr = mat[i][n - 1]; mat[i][n - 1] = prev; prev = curr; } n--; // Move the elements of last row from the remaining // rows if (row < m) { for (int i = n - 1; i >= col; i--) { curr = mat[m - 1][i]; mat[m - 1][i] = prev; prev = curr; } } m--; // Move the elements of first column from the // remaining rows if (col < n) { for (int i = m - 1; i >= row; i--) { curr = mat[i][col]; mat[i][col] = prev; prev = curr; } } col++; } } // Driver code int main() { // create a matrix of size RxC // R - Rows, C - Columns int mat[R][C] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } }; // Print input matrix printf("\n Input Matrix \n"); for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { printf(" %d ", mat[i][j]); } printf("\n"); } // This function is rotate the elements of matrix. rotatematrix(R, C, mat); // Print rotated matrix printf("\n Rotated Matrix \n"); for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { printf(" %d ", mat[i][j]); } printf("\n"); } return 0; }
Producción
Input Matrix 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Rotated Matrix 5 1 2 3 9 10 6 4 13 11 7 8 14 15 16 12
Complejidad temporal: O(m*n), donde m es el número de filas y n es el número de columnas.
Espacio Auxiliar: O(1), No se usa Espacio extra.
Publicación traducida automáticamente
Artículo escrito por mukulsomukesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA