Open In App

Java Program to Check horizontal and vertical symmetry in binary matrix

Improve
Improve
Like Article
Like
Save
Share
Report

Given a 2D binary matrix of N rows and M columns. The task is to check whether the matrix is horizontally symmetric, vertically symmetric, or both. The matrix is said to be horizontally symmetric if the first row is the same as the last row, the second row is the same as the second last row, and so on. And the matrix is said to be vertically symmetric if the first column is the same as the last column, the second column is the same as the second last column, and so on. Print “VERTICAL” if the matrix is vertically symmetric, “HORIZONTAL” if the matrix is vertically symmetric, “BOTH” if the matrix is vertically and horizontally symmetric, and “NO” if not symmetric.

Examples:  

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: Both 

The idea is to use 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 an identical element, is found, mark the 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 an identical element, is found, mark the matrix as not vertical symmetric.

Below is the implementation of the above idea: 

Java




// Java program to find if
// a matrix is symmetric.
import java.io.*;
 
public class GFG {
 
    static void checkHV(int[][] arr, int N,
                        int M)
    {
 
        // Initializing as both horizontal
        // and vertical symmetric.
        boolean horizontal = true;
        boolean vertical = true;
 
        // Checking for Horizontal Symmetry.
        // We compare first row with last
        // row, second row with second
        // last row and so on.
        for (int i = 0, k = N - 1;
             i < N / 2; i++, k--) {
 
            // Checking each cell of a column.
            for (int j = 0; j < M; j++) {
                // check if every cell is identical
                if (arr[i][j] != arr[k][j]) {
                    horizontal = false;
                    break;
                }
            }
        }
 
        // Checking for Vertical Symmetry. We compare
        // first column with last column, second column
        // with second last column and so on.
        for (int i = 0, k = M - 1;
             i < M / 2; i++, k--) {
 
            // Checking each cell of a row.
            for (int j = 0; j < N; j++) {
                // check if every cell is identical
                if (arr[i][j] != arr[k][j]) {
                    horizontal = false;
                    break;
                }
            }
        }
 
        if (!horizontal && !vertical)
            System.out.println("NO");
 
        else if (horizontal && !vertical)
            System.out.println("HORIZONTAL");
 
        else if (vertical && !horizontal)
            System.out.println("VERTICAL");
 
        else
            System.out.println("BOTH");
    }
 
    // Driver Code
    static public void main(String[] args)
    {
        int[][] mat = { { 1, 0, 1 },
                        { 0, 0, 0 },
                        { 1, 0, 1 } };
 
        checkHV(mat, 3, 3);
    }
}
 
// This code is contributed by vt_m.


Output:  

BOTH

Time Complexity: O(N*M).
Auxiliary Space: O(1) as it is using constant space for variables

Please refer complete article on Check horizontal and vertical symmetry in binary matrix for more details!



Last Updated : 18 Feb, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads