# 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!