Thursday, July 4, 2024
HomeLanguagesPythonPython Program to Check horizontal and vertical symmetry in binary matrix

Python Program to Check horizontal and vertical symmetry in binary matrix

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 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 vertical 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 vertical and horizontal 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: 

Python3




# Python3 program to find if a matrix is symmetric.
MAX = 1000
 
def checkHV(arr, N, M):
     
    # Initializing as both horizontal and vertical
    # symmetric.
    horizontal = True
    vertical = True
     
    # Checking for Horizontal Symmetry. We compare
    # first row with last row, second row with second
    # last row and so on.
    i = 0
    k = N - 1
    while(i < N // 2):
         
        # Checking each cell of a column.
        for j in range(M):
             
            # check if every cell is identical
            if (arr[i][j] != arr[k][j]):
                horizontal = False
                break
        i += 1
        k -= 1
         
    # Checking for Vertical Symmetry. We compare
    # first column with last column, second column
    # with second last column and so on.
    i = 0
    k = M - 1
    while(i < M // 2):
         
        # Checking each cell of a row.
        for j in range(N):
             
            # check if every cell is identical
            if (arr[i][j] != arr[k][j]):
                vertical = False
                break
        i += 1
        k -= 1
         
    if (not horizontal and not vertical):
        print("NO")
    elif (horizontal and not vertical):
        print("HORIZONTAL")
    elif (vertical and not horizontal):
        print("VERTICAL")
    else:
        print("BOTH")
         
# Driver code
mat = [[1, 0, 1],[ 0, 0, 0],[1, 0, 1]]
 
checkHV(mat, 3, 3)
 
# This code is contributed by shubhamsingh10


Output

BOTH

Time Complexity: O(N*M).
Auxiliary Space: O(1)

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

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
You’ll access excellent video content by our CEO, Sandeep Jain, tackle common interview questions, and engage in real-time coding contests covering various DSA topics. We’re here to prepare you thoroughly for online assessments and interviews.
Ready to dive in? Explore our free demo content and join our DSA course, trusted by over 100,000neveropen! Whether it’s DSA in C++, Java, Python, or JavaScript we’ve got you covered. Let’s embark on this exciting journey together!

Ted Musemwa
As a software developer I’m interested in the intersection of computational thinking and design thinking when solving human problems. As a professional I am guided by the principles of experiential learning; experience, reflect, conceptualise and experiment.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments