Rotate Matrix
Problem Statement
Given a 2-dimensional matrix of size ‘N’ x ‘M’, rotate the elements of the matrix clockwise.
For example:
Input Matrix: [ [ 1, 2, 3 ]
[ 4, 5, 6 ]
[ 7, 8, 9 ] ]
Output Matrix: [ [ 4, 1, 2 ]
[ 7, 5, 3 ]
[ 8, 9, 6 ] ]
The output matrix is generated by rotating the elements of the input matrix in a clockwise direction. Note that every element is rotated only once.
Note :
You do not need to print anything; it has already been taken care of. Also, update the given matrix in-place.
Input Format :
The first line of input contains an integer 'T' representing the number of test cases. Then the test cases follow.
The first line of each test case contains two single-spaced integers N and M, representing the number of rows and columns of the matrix, respectively.
The next N line contains M single-spaced integers denoting the matrix elements.
Output Format :
For each test case, the modified matrix is printed.
The output for each test case is in a separate line.
Constraints :
1 <= T <= 10
1 <= N, M <= 100
-10^5 <= data <= 10^5,
where ‘T’ is the number of test cases, ‘N’ and ‘M’ are the numbers of rows and columns respectively and ‘data’ is the value of the elements of the matrix.
Sample Input 1 :
1
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Sample Output 1 :
5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12
Explanation Of Sample Input 1 :
The resulting matrix after rotating the given matrix clockwise is shown above.
Sample Input 2 :
2
2 2
1 3
4 5
3 3
3 4 5
5 6 7
8 10 20
Sample Output 2 :
4 1
5 3
5 3 4
8 6 5
10 20 7
Solution to the Above Problem is
void rotateMatrix(vector<vector<int>> &mat, int n, int m){ int sr=0,sc=0,er=n-1,ec=m-1; int pre,curr; if(n==m & n%2==0){ while(sr<=er && sc<=ec){ if(sr+1<=er)pre=mat[sr+1][sc]; for(int i=sc; i<=ec; i++){ curr=mat[sr][i]; mat[sr][i]=pre; pre=curr; } sr++; for(int i=sr;i<=er; i++ ){ curr=mat[i][ec]; mat[i][ec]=pre; pre=curr; } ec--; for(int i=ec; i>=sc; i--){ curr=mat[er][i]; mat[er][i]=pre; pre=curr; } er--; for(int i=er; i>=sr; i--){ curr=mat[i][sc]; mat[i][sc]=pre; pre=curr; } sc++; } } else{ while(sr<er && sc<ec){ if(sr+1<=er)pre=mat[sr+1][sc]; for(int i=sc; i<=ec; i++){ curr=mat[sr][i]; mat[sr][i]=pre; pre=curr; } sr++; for(int i=sr;i<=er; i++ ){ curr=mat[i][ec]; mat[i][ec]=pre; pre=curr; } ec--; for(int i=ec; i>=sc; i--){ curr=mat[er][i]; mat[er][i]=pre; pre=curr; } er--; for(int i=er; i>=sr; i--){ curr=mat[i][sc]; mat[i][sc]=pre; pre=curr; } sc++; } }
}
Thank you for reading.
0 Comments
If you have any doubts/suggestion/any query or want to improve this article, you can comment down below and let me know. Will reply to you soon.