Open In App

C++ Program to Rotate Matrix Elements

Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix, clockwise rotate elements in it.

Examples:

Input:
1    2    3
4    5    6
7    8    9

Output:
4    1    2
7    5    3
8    9    6

For 4*4 matrix:
Input:
1    2    3    4    
5    6    7    8
9    10   11   12
13   14   15   16

Output:
5    1    2    3
9    10   6    4
13   11   7    8
14   15   16   12

The idea is to use loops similar to the program for printing a matrix in spiral form. One by one rotate all rings of elements, starting from the outermost. To rotate a ring, we need to do following. 
    1) Move elements of top row. 
    2) Move elements of last column. 
    3) Move elements of bottom row. 
    4) Move elements of first column. 
Repeat above steps for inner ring while there is an inner ring.

Below is the implementation of above idea.

C++




// C++ program to rotate a matrix 
#include <iostream> 
#define R 4 
#define C 4 
using namespace std; 
  
// A function to rotate a matrix 
// mat[][] of size R x C. 
// Initially, m = R and n = C 
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, this element will 
        // replace first element of current 
        // row 
        prev = mat[row + 1][col]; 
  
        /* Move elements of first row from 
           the remaining rows */
        for (int i = col; i < n; i++) 
        
            curr = mat[row][i]; 
            mat[row][i] = prev; 
            prev = curr; 
        
        row++; 
  
        /* Move 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 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 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++; 
    
  
    // Print rotated matrix 
    for (int i=0; i<R; i++) 
    
        for (int j=0; j<C; j++) 
        cout << mat[i][j] << " "
        cout << endl; 
    
  
// Driver code
int main() 
    // Test Case 1 
    int a[R][C] = {{1, 2, 3, 4}, 
                   {5, 6, 7, 8}, 
                   {9, 10, 11, 12}, 
                   {13, 14, 15, 16}}; 
  
    // Test Case 2 
    /* int a[R][C] = {{1, 2, 3}, 
                      {4, 5, 6}, 
                      {7, 8, 9}}; 
    */ rotatematrix(R, C, a); 
    return 0; 


Output:

5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12

Time Complexity: O(max(m,n) * max(m,n))
Auxiliary Space: O(m*n)

Please refer complete article on Rotate Matrix Elements for more details!



Last Updated : 22 Aug, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads