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