# C++ Program to Rotate all Matrix elements except the diagonal K times by 90 degrees in clockwise direction

Last Updated : 27 Jan, 2022

Given a square matrix mat[][] of dimension N and an integer K, the task is to rotate the matrix by 90 degrees K times without changing the position of the diagonal elements.

Examples:

Input: mat[][] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}}, K = 1
Output:
Â 1 16 11 6 5 Â
Â 22 7 12 9 2
Â 23 18 13 8 3
Â 24 17 14 19 4
Â 21 20 15 10 25

Input: mat[][] = {{10, 11}, {12, 13}}, K = 2
Output:
10 11
12 13

Approach: The given problem can be solved by using the idea discussed in this article and the fact that the matrix restores after performing clockwise rotation 4 times. Follow the below steps to solve the given problem:

• Update the value of K as K % 4.
• Iterate until K is a positive and perform the following steps:
• Traverse the matrix, for i over the range [0, N / 2) and j over the range[0, N – i – 1) and perform the following steps:
• If the value of i != j and (i + j) != (N – 1), then perform the following steps:
• Store the value of mat[i][j] in a temporary variable temp.
• Update the value of mat[i][j] as mat[N – 1 – j][i].
• Update the value of mat[N – 1 – j][i] as mat[N – 1 -i][N – 1 – j].
• Update the value of mat[N – 1 Â – i][N – 1 – j] as mat[j][N – 1 – i].
• Update the value of mat[j][N – 1 – i] as temp.
• After completing the above steps, print the updated matrix obtained.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to print the matrix ` `void` `print(vector >& mat) ` `{ ` `    ``// Iterate over the rows ` `    ``for` `(``int` `i = 0; i < mat.size(); i++) { ` ` `  `        ``// Iterate over the columns ` `        ``for` `(``int` `j = 0; j < mat[0].size(); j++) ` ` `  `            ``// Print the value ` `            ``cout << setw(3) << mat[i][j]; ` `        ``cout << " ` `"; ` `    ``} ` `} ` ` `  `// Function to perform the swapping of ` `// matrix elements in clockwise manner ` `void` `performSwap(vector >& mat, ` `                 ``int` `i, ``int` `j) ` `{ ` `    ``int` `N = mat.size(); ` ` `  `    ``// Stores the last row ` `    ``int` `ei = N - 1 - i; ` ` `  `    ``// Stores the last column ` `    ``int` `ej = N - 1 - j; ` ` `  `    ``// Perform the swaps ` `    ``int` `temp = mat[i][j]; ` `    ``mat[i][j] = mat[ej][i]; ` `    ``mat[ej][i] = mat[ei][ej]; ` `    ``mat[ei][ej] = mat[j][ei]; ` `    ``mat[j][ei] = temp; ` `} ` ` `  `// Function to rotate non - diagonal ` `// elements of the matrix K times in ` `// clockwise direction ` `void` `rotate(vector >& mat, ` `            ``int` `N, ``int` `K) ` `{ ` `    ``// Update K to K % 4 ` `    ``K = K % 4; ` ` `  `    ``// Iterate until K is positive ` `    ``while` `(K--) { ` ` `  `        ``// Iterate each up to N/2-th row ` `        ``for` `(``int` `i = 0; i < N / 2; i++) { ` ` `  `            ``// Iterate each column ` `            ``// from i to N - i - 1 ` `            ``for` `(``int` `j = i; ` `                 ``j < N - i - 1; j++) { ` ` `  `                ``// Check if the element ` `                ``// at i, j is not a ` `                ``// diagonal element ` `                ``if` `(i != j ` `                    ``&& (i + j) != N - 1) { ` ` `  `                    ``// Perform the swapping ` `                    ``performSwap(mat, i, j); ` `                ``} ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// Print the matrix ` `    ``print(mat); ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `K = 5; ` `    ``vector > mat = { ` `        ``{ 1, 2, 3, 4 }, ` `        ``{ 6, 7, 8, 9 }, ` `        ``{ 11, 12, 13, 14 }, ` `        ``{ 16, 17, 18, 19 }, ` `    ``}; ` `    ``int` `N = mat.size(); ` `    ``rotate(mat, N, K); ` ` `  `    ``return` `0; ` `} `

Output:Â

```  1 11  6  4
17  7  8  2
18 12 13  3
16 14  9 19```

Â

Time Complexity: O(N2)
Auxiliary Space: O(1)

Please refer complete article on Rotate all Matrix elements except the diagonal K times by 90 degrees in clockwise direction for more details!

Article Tags :
Practice Tags :