# 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.

1. Create a new matrix b[][].
2. 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.
3.  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.
4. 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=a`(copies the element 7)

In the second pass,x increases by 1. `b=a`(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[], int n, int b[]) {
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;
int b; //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: