Given a 2D binary matrix of N rows and M columns. The task is to check whether the matrix is horizontal symmetric, vertical symmetric or both. The matrix is said to be horizontal symmetric if the first row is same as the last row, the second row is same as the second last row and so on. And the matrix is said to be vertical symmetric if the first column is same as the last column, the second column is same as the second last column and so on. Print “VERTICAL” if the matrix is vertical symmetric, “HORIZONTAL” if the matrix is vertical symmetric, “BOTH” if the matrix is vertical and horizontal symmetric and “NO” if not symmetric.
Input : N = 3 M = 3 0 1 0 0 0 0 0 1 0 Output : Both First and third row are same and also second row is in middle. So Horizontal Symmetric. Similarly, First and third column are same and also second column is in middle, so Vertical Symmetric. Input : 0 0 1 1 1 0 0 0 1. Output : Horizontal
The idea is to use to pointers indicating two rows (or columns) and compare each cell of both the pointed rows (or columns).
For Horizontal Symmetry, initialize one pointer i = 0 and another pointer j = N – 1.
Now, compare each element of i-th row and j-th row. Increase i by 1 and decrease j by 1 in each loop cycle. If at least one not identical element is found, mark matrix as not horizontal symmetric.
Similarly, for Vertical Symmetry, initialize one pointer i = 0 and another pointer j = M – 1.
Now, compare each element of i-th column and j-th column. Increase i by 1 and decrease j by 1 in each loop cycle. If at least one not identical element is found, mark matrix as not vertical symmetric.
Below is the implementation of above idea :
Time Complexity: O(N*M).
This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Program to check if a matrix is Binary matrix or not
- Program to check diagonal matrix and scalar matrix
- Check if a given matrix can be converted to another given matrix by row and column exchanges
- Check if it is possible to make the given matrix increasing matrix or not
- Check if matrix can be converted to another matrix by transposing square sub-matrices
- Check whether row or column swaps produce maximum size binary sub-matrix with all 1s
- Check if the rows of a binary matrix can be made unique by removing a single column
- Find trace of matrix formed by adding Row-major and Column-major order of same matrix
- Maximize sum of N X N upper left sub-matrix from given 2N X 2N matrix
- Circular Matrix (Construct a matrix with numbers 1 to m*n in spiral way)
- Count frequency of k in a matrix of size n where matrix(i, j) = i+j
- Program to convert given Matrix to a Diagonal Matrix
- Maximum trace possible for any sub-matrix of the given matrix
- Minimum number of steps to convert a given matrix into Upper Hessenberg matrix
- Minimum steps required to convert the matrix into lower hessenberg matrix
- Minimum number of steps to convert a given matrix into Diagonally Dominant Matrix
- C++ program to Convert a Matrix to Sparse Matrix
- Convert given Matrix into sorted Spiral Matrix
- Create matrix whose sum of diagonals in each sub matrix is even
- Construct a square Matrix whose parity of diagonal sum is same as size of matrix