GeeksforGeeks App
Open App
Browser
Continue

# 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 = 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:

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

My Personal Notes arrow_drop_up