Advertisement
vlatkovski

Rotate square matrix in-place

Sep 10th, 2022
1,470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.52 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 100;
  5.  
  6. void print(int a[N], int n) {
  7.     printf("[");
  8.     for (int i = 0; i < n; ++i) {
  9.         printf("%s%2d", i > 0 ? ", " : "", a[i]);
  10.     }
  11.     printf("]");
  12. }
  13.  
  14. void print(int a[N][N], int n) {
  15.     printf("[");
  16.     for (int i = 0; i < n; ++i) {
  17.         if (i > 0) printf(" ");
  18.         print(a[i], n);
  19.         printf("%s", i+1 < n ? ",\n" : "");
  20.     }
  21.     printf("]\n");
  22. }
  23.  
  24. void mirror_horizontally(int a[N][N], int n) {
  25.     for (int i = 0; i < n; ++i) {
  26.         for (int j = 0; j < n/2; ++j) {
  27.             swap(a[i][j], a[i][n-1-j]);
  28.         }
  29.     }
  30. }
  31.  
  32. void mirror_along_main_diagonal(int a[N][N], int n) {
  33.     for (int i = 0; i < n; ++i) {
  34.         for (int j = 0; j < i; ++j) {
  35.             swap(a[i][j], a[j][i]);
  36.         }
  37.     }
  38. }
  39.  
  40. void rotate_clockwise(int a[N][N], int n) {
  41.     mirror_along_main_diagonal(a, n);
  42.     mirror_horizontally(a, n);
  43. }
  44.  
  45. int main() {
  46.     int a[N][N];
  47.     int n = 4;
  48.     for (int i = 0; i < n; ++i) {
  49.         for (int j = 0; j < n; ++j) {
  50.             a[i][j] = i*n + j;
  51.         }
  52.     }
  53.     print(a, n);
  54.     mirror_horizontally(a, n);
  55.     print(a, n);
  56.     mirror_horizontally(a, n);
  57.     print(a, n);
  58.     mirror_along_main_diagonal(a, n);
  59.     print(a, n);
  60.     mirror_along_main_diagonal(a, n);
  61.     print(a, n);
  62.     rotate_clockwise(a, n);
  63.     print(a, n);
  64.     rotate_clockwise(a, n);
  65.     print(a, n);
  66.     rotate_clockwise(a, n);
  67.     print(a, n);
  68.     rotate_clockwise(a, n);
  69.     print(a, n);
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement