Open In App

Centrosymmetric Matrix

Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix of size n x n. The task is to check whether the given matrix is a Centrosymmetric Matrix or not.
In mathematics, a centrosymmetric matrix is a matrix that is symmetric about its center.

Examples:  

Input : n = 3,
        m[][] = { { 1, 3, 5 },
                  { 6, 8, 6 },
                  { 5, 3, 1 } };
Output : Yes

Input : n = 3, 
        m[][] = { { 1, 3, 5 },
                  { 6, 8, 6 },
                  { 5, 3, 0 } };
Output : No

The idea is to check for each element whether m[i][j] is equal to m[n – i – 1][n – j – 1]. If any element does not satisfy the above condition, then print “No”, otherwise print “Yes”.

Below is the implementation of the above approach:  

C++




// CPP Program to check whether given
// matrix is centrosymmetric or not.
#include <bits/stdc++.h>
using namespace std;
#define N 3
 
bool checkCentrosymmetricted(int n, int m[N][N])
{
    int mid_row;
 
    // Finding the middle row of the matrix
    if (n & 1)
        mid_row = n / 2 + 1;
    else
        mid_row = n / 2;
 
    // for each row upto middle row.
    for (int i = 0; i < mid_row; i++) {
 
        // If each element and its corresponding
        // element is not equal then return false.
        for (int j = 0; j < n; j++) {
            if (m[i][j] != m[n - i - 1][n - j - 1])
                return false;
        }
    }
 
    return true;
}
 
// Driven Program
int main()
{
    int n = 3;
    int m[N][N] = { { 1, 3, 5 },
                    { 6, 8, 6 },
                    { 5, 3, 1 } };
 
    (checkCentrosymmetricted(n, m) ?
              (cout << "Yes") : (cout << "No"));
 
    return 0;
}


Java




// Java Program to check whether given
// matrix is centrosymmetric or not.
import java.io.*;
 
class GFG {
         
    static int N = 3;
     
    static boolean checkCentrosymmetricted(
                           int n, int m[][])
    {
        int mid_row;
     
        // Finding the middle row of the
        // matrix
        if ((n & 1)>0)
            mid_row = n / 2 + 1;
        else
            mid_row = n / 2;
     
        // for each row upto middle row.
        for (int i = 0; i < mid_row; i++)
        {
     
            // If each element and its
            // corresponding element is
            // not equal then return false.
            for (int j = 0; j < n; j++)
            {
                if (m[i][j] !=
                  m[n - i - 1][n - j - 1])
                    return false;
            }
        }
     
        return true;
    }
     
    // Driven Program
    public static void main (String[] args)
    {
        int n = 3;
        int m[][] = { { 1, 3, 5 },
                      { 6, 8, 6 },
                      { 5, 3, 1 } };
 
    if(checkCentrosymmetricted(n, m))
        System.out.println( "Yes");
    else
        System.out.println( "No");
    }
}
 
// This code is contributed by anuj_67.


Python3




# Python3 Program to check whether given
# matrix is centrosymmetric or not.
 
def checkCentrosymmetricted( n, m):
 
    mid_row = 0;
 
    # Finding the middle row
    # of the matrix
    if ((n & 1) > 0):
        mid_row = n / 2 + 1;
    else:
        mid_row = n / 2;
 
    # for each row upto middle row.
    for i in range(int(mid_row)):
 
        # If each element and
        # its corresponding
        # element is not equal
        # then return false.
        for j in range(n):
            if (m[i][j] != m[n - i - 1][n - j - 1]):
                return False;
 
    return True;
     
# Driver Code
n = 3;
m = [[1, 3, 5 ],
     [ 6, 8, 6 ],
     [ 5, 3, 1 ]];
 
if(checkCentrosymmetricted(n, m)):
    print("Yes");
else:
    print("No");
         
# This code is contributed by mits


C#




// C# Program to check whether given
// matrix is centrosymmetric or not.
using System;
 
class GFG {
         
    ///static int N = 3;
     
    static bool checkCentrosymmetricted(
                        int n, int [,]m)
    {
        int mid_row;
     
        // Finding the middle row of the
        // matrix
        if ((n & 1)>0)
            mid_row = n / 2 + 1;
        else
            mid_row = n / 2;
     
        // for each row upto middle row.
        for (int i = 0; i < mid_row; i++)
        {
     
            // If each element and its
            // corresponding element is
            // not equal then return false.
            for (int j = 0; j < n; j++)
            {
                if (m[i,j] !=
                m[n - i - 1,n - j - 1])
                    return false;
            }
        }
     
        return true;
    }
     
    // Driven Program
    public static void Main()
    {
        int n = 3;
        int [,]m = { { 1, 3, 5 },
                    { 6, 8, 6 },
                    { 5, 3, 1 } };
 
        if(checkCentrosymmetricted(n, m))
            Console.WriteLine( "Yes");
        else
            Console.WriteLine( "No");
    }
}
 
// This code is contributed by anuj_67.


PHP




<?php
// PHP Program to check whether given
// matrix is centrosymmetric or not.
 
//$N = 3;
 
function checkCentrosymmetricted( $n, $m)
{
    $mid_row;
 
    // Finding the middle row
    // of the matrix
    if ($n & 1)
        $mid_row = $n / 2 + 1;
    else
        $mid_row = $n / 2;
 
    // for each row upto middle row.
    for($i = 0; $i < $mid_row; $i++)
    {
 
        // If each element and
        // its corresponding
        // element is not equal
        // then return false.
        for($j = 0; $j < $n; $j++) {
            if ($m[$i][$j] != $m[$n - $i - 1]
                                [$n - $j - 1])
                return false;
        }
    }
 
    return true;
}
     
    // Driver Code
    $n = 3;
    $m = array(array(1, 3, 5 ),
                array( 6, 8, 6 ),
                array( 5, 3, 1 ));
 
    if(checkCentrosymmetricted($n, $m) )
        echo "Yes" ;
    else
        echo "No";
         
// This code is contributed by anuj_67.
?>


Javascript




<script>
 
 
// Javascript Program to check whether given
// matrix is centrosymmetric or not.
 
let N = 3
 
function checkCentrosymmetricted( n,  m)
{
    let mid_row;
 
    // Finding the middle row of the matrix
    if (n & 1)
        mid_row = Math.floor(n / 2) + 1;
    else
        mid_row = n / 2;
 
    // for each row upto middle row.
    for (let i = 0; i < mid_row; i++) {
 
        // If each element and its corresponding
        // element is not equal then return false.
        for (let j = 0; j < n; j++) {
            if (m[i][j] != m[n - i - 1][n - j - 1])
                return false;
        }
    }
 
    return true;
}
 
// Driver Code
 
let n = 3;
let m = [ [ 1, 3, 5 ],
        [ 6, 8, 6 ],
        [ 5, 3, 1 ] ];
 
(checkCentrosymmetricted(n, m) ?
              (document.write("Yes")) : document.write("No"));
 
// This code is contributed by jana_sayanta.
</script>


Output

Yes

Time Complexity: O(N2)
Auxiliary Space: O(1)



Last Updated : 05 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads