Open In App

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

Last Updated : 05 Sep, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

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:

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



Next Article

Similar Reads