Rotation of a square matrix by 90 degrees in c++
In this tutorial, we will learn how to rotate a square matrix by 90 degrees in c++. There are various ways to rotate a square matrix by 90 degrees(We will learn other ways in other articles). Below is an interesting solution on the rotation of a square matrix in C++. A square matrix is a matrix in which the rows and columns are equal. Rotation by 90 degrees means:
Input:
1 2 3 4 5 6 7 8 9
Output:
7 4 1 8 5 2 9 6 3
Algorithm of how to rotate a square matrix by 90 degrees in C++
The way we will be using is by creating a new matrix.
- Create a new matrix b[][].
- Map the indexes of a to b by rotation. For example, in the above example: 1 in matrix A is at i=0 and j=0 and in matrix b, it will be at i=0 and j=2.
- Similarly, 4 element in matrix A is at i=1 and j=0 and in matrix b, it will be at i=0 and j=1.
- Find out all the corresponding indexes like this.
Below is the figure, The new indexes are represented by pink ink. i is the rows and j is the columns.
Now, look at this part of the code.
for(int col=0;col<n;col++) { int x=0; for(int row=n-1;row>=0;row--) { b[col][x]=a[row][col]; x++; } }
In the first pass, b[0][0]=a[2][0]
(copies the element 7)
In the second pass,x increases by 1. b[0][1]=a[1][0]
(copies the element 4)
Similarly, the rest of the elements get copied to matrix b.
Here is the rest of the code:
#include<bits/stdc++.h> using namespace std; void rotate(int a[][10], int n, int b[][10]) { for (int colofmatrix = 0; colofmatrix < n; colofmatrix++) { int x = 0; for (int rowofmatrix = n - 1; rowofmatrix >= 0; rowofmatrix--) { b[colofmatrix][x] = a[rowofmatrix][colofmatrix]; x++; } } } int main() { int rowofmatrix, colofmatrix, n, a[10][10]; int b[10][10]; //creating a temporary array cin >> n; //enter number of rows and cols for (rowofmatrix = 0; rowofmatrix < n; rowofmatrix++) { for (colofmatrix = 0; colofmatrix < n; colofmatrix++) { cin >> a[rowofmatrix][colofmatrix]; } } rotate(a, n, b); for (rowofmatrix = 0; rowofmatrix < n; rowofmatrix++) { for (colofmatrix = 0; colofmatrix < n; colofmatrix++) { cout << b[rowofmatrix][colofmatrix] << '\t'; } cout << endl; } }
Input:
3 1 2 3 4 5 6 7 8 9
Output:
7 4 1 8 5 2 9 6 3
Input: 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Output:
13 9 5 1 14 10 6 2 15 11 7 3 16 12 8 4
The auxiliary space used here is O(n) and time complexity is O(n*n).
If you like this post, please comment below and also refer to:
Leave a Reply