Answer to Question #187234 in Python for Pranav

Question #187234

Rotate Matrix Rings

Given a matrix of order M*N and a value K, write a program to rotate each ring of the matrix clockwise by K elements. If in any ring has less than or equal to K elements, then don’t rotate that ring.


The first line of input will be two space-separated integers, denoting the M and N.

The next M lines will contain N space-separated integers.

The next line will contain an integer, denoting K.


The output should be M*N matrix by rotating the matrix by K elements.


For ex, if the given M and N are 4 and 4 respectively. If the matrix elements are

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

If the given K is 3. Rotate each ring of the matrix by 3 elements.

In the above matrix, the elements (1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5) is a ring, similarly, the elements (6, 7, 11, 10) will make a ring.

Therefore, by rotating each ring in clockwise direction by 3 elements will give (13, 9, 5, 1, 2, 3, 4, 8, 12, 16, 15, 14) and (10, 6, 7, 11). So output is

13 9 5 1
14 7 11 2
15 6 10 3
16 12 8 4






1
Expert's answer
2021-04-30T02:04:16-0400
def rotateMatrix(matrix):
    if not len(matrix):
        return

    top = 0

    bottom = len(matrix) - 1

    left = 0

    right = len(matrix[0]) - 1

    while left < right and top < bottom:


        prev = matrix[top + 1][left]


        for i in range(left, right + 1):
            curr = matrix[top][i]

            matrix[top][i] = prev

            prev = curr

        top += 1



        for i in range(top, bottom + 1):
            curr = matrix[i][right]

            matrix[i][right] = prev

            prev = curr

        right -= 1


        for i in range(right, left - 1, -1):
            curr = matrix[bottom][i]

            matrix[bottom][i] = prev

            prev = curr

        bottom -= 1


        for i in range(bottom, top - 1, -1):
            curr = matrix[i][left]

            matrix[i][left] = prev

            prev = curr

        left += 1

    return matrix


if __name__ == '__main__':

    matr= [
           [1, 2, 3, 4],
           [5, 6, 7, 8],
           [9, 10, 11, 12],
           [13, 14, 15, 16]
           ]

    print(rotateMatrix(matr))

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog
APPROVED BY CLIENTS