In-place rotation of a matrix by 90 degrees in C++
In this tutorial, we will learn In-place rotation of a matrix by 90 degrees in c++. There are many ways to do it. We will be learning in-place rotation in this article. In-place rotation means changes are made in the original array.
A square matrix is a matrix in which the number of 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 In-place rotation of a matrix by 90 degrees in C++
We will first find the transpose of a matrix and then the inverse.
Transpose of a matrix:
The transpose of a matrix is a new matrix whose columns are the rows of the original. Basically, we need to swap the row and column elements. For example- a[0][0] remains a[0][0].All the diagonal elements remain the same in transpose. a[0][1] becomes a[1][0].
Input:
1 2 3 4 5 6 7 8 9
transpose of this:
1 4 7 2 5 8 3 6 9 Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 transpose of this:
1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16
The Inverse of a matrix:
The inverse of a 3*3 matrix is as follows: Input: 1 2 3 4 5 6 7 8 9 Inverse:
3 2 1 6 5 4 9 8 7 and for a 4*4 matrix: Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Inverse:
4 3 2 1 8 7 6 5 12 11 10 9 16 15 14 13
As we can observe a pattern here, the inverse of a matrix is obtained by reversing the elements of all rows. This is the algorithm we will be using to find the inverse of a matrix. And by first finding transpose and then the inverse of a matrix, the matrix will be rotated by 90 degrees.
This is the code for swapping 2 elements.
void swap(int & first, int & second) { int temp = first; first = second; second = temp; }
Here, is the code implementation:
C++ Program of In-place rotation of a matrix by 90 degrees
//by transpose and inverse #include<iostream> using namespace std; void swap(int & first, int & second) { int temp = first; first = second; second = temp; } void transpose(int a[][10], int n) { int row = 0; while (row < n) { for (int column = row; column < n; column++) { swap(a[row][column], a[column][row]); } row++; } } void inverse(int a[][10], int n) { for (int var = 0; var < (n / 2); var++) { for (int rowsofmatrix = 0; rowsofmatrix < n; rowsofmatrix++) { swap(a[rowsofmatrix][var], a[rowsofmatrix][n - var - 1]); } } } int main() { int rowsofmatrix, columnsofmatrix, m, n, a[10][10]; cin >> n; for (rowsofmatrix = 0; rowsofmatrix < n; rowsofmatrix++) { for (columnsofmatrix = 0; columnsofmatrix < n; columnsofmatrix++) { cin >> a[rowsofmatrix][columnsofmatrix]; } } transpose(a, n); inverse(a, n); for (rowsofmatrix = 0; rowsofmatrix < n; rowsofmatrix++) { for (columnsofmatrix = 0; columnsofmatrix < n; columnsofmatrix++) { cout << a[rowsofmatrix][columnsofmatrix] << '\t'; } cout << endl; } }
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 Input:
5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Output:
21 16 11 6 1 22 17 12 7 2 23 18 13 8 3 24 19 14 9 4 25 20 15 10 5
Also, refer to:
Leave a Reply