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

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 = 1Output:

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 = 2Output:

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**.

- Store the value of

- Traverse the matrix, for
- After completing the above steps, print the updated matrix obtained.

Below is the implementation of the above approach:

## Python3

`# Python3 program for the above approach` ` ` `# Function to print the matrix` `def` `printMat(mat):` ` ` ` ` `# Iterate over the rows` ` ` `for` `i ` `in` `range` `(` `len` `(mat)):` ` ` ` ` `# Iterate over the columns` ` ` `for` `j ` `in` `range` `(` `len` `(mat[` `0` `])):` ` ` ` ` `# Print the value` ` ` `print` `(mat[i][j], end ` `=` `" "` `)` ` ` ` ` `print` `()` ` ` `# Function to perform the swapping of` `# matrix elements in clockwise manner` `def` `performSwap(mat, i, j):` ` ` ` ` `N ` `=` `len` `(mat)` ` ` ` ` `# Stores the last row` ` ` `ei ` `=` `N ` `-` `1` `-` `i` ` ` ` ` `# Stores the last column` ` ` `ej ` `=` `N ` `-` `1` `-` `j` ` ` ` ` `# Perform the swaps` ` ` `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` `def` `rotate(mat, N, K):` ` ` ` ` `# Update K to K % 4` ` ` `K ` `=` `K ` `%` `4` ` ` ` ` `# Iterate until K is positive` ` ` `while` `(K > ` `0` `):` ` ` ` ` `# Iterate each up to N/2-th row` ` ` `for` `i ` `in` `range` `(` `int` `(N ` `/` `2` `)):` ` ` ` ` `# Iterate each column` ` ` `# from i to N - i - 1` ` ` `for` `j ` `in` `range` `(i, N ` `-` `i ` `-` `1` `):` ` ` ` ` `# Check if the element` ` ` `# at i, j is not a` ` ` `# diagonal element` ` ` `if` `(i !` `=` `j ` `and` `(i ` `+` `j) !` `=` `N ` `-` `1` `):` ` ` ` ` `# Perform the swapping` ` ` `performSwap(mat, i, j)` ` ` ` ` `K ` `-` `=` `1` ` ` ` ` `# Print the matrix` ` ` `printMat(mat)` ` ` `# Driver Code` `K ` `=` `5` `mat ` `=` `[ [ ` `1` `, ` `2` `, ` `3` `, ` `4` `],` ` ` `[ ` `6` `, ` `7` `, ` `8` `, ` `9` `],` ` ` `[ ` `11` `, ` `12` `, ` `13` `, ` `14` `],` ` ` `[ ` `16` `, ` `17` `, ` `18` `, ` `19` `] ]` `N ` `=` `len` `(mat)` ` ` `rotate(mat, N, K)` ` ` `# This code is contributed by Dharanendra L V.` |

**Output:**

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

**Time Complexity:** O(N^{2})**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!