Skip to content
Related Articles

Related Articles

Check given matrix is magic square or not
  • Difficulty Level : Easy
  • Last Updated : 09 May, 2019
GeeksforGeeks - Summer Carnival Banner

Given a matrix, check whether it’s Magic Square or not. A Magic Square is a n x n matrix of distinct element from 1 to n2 where sum of any row, column or diagonal is always equal to same number.

Examples:

Input : n = 3
  2   7   6
  9   5   1
  4   3   8
Output : Magic matrix
Explanation:In matrix sum of each
row and each column and diagonals sum is 
same = 15.

Input : n = 3
  1   2   2 
  2   2   1
  2   1   2
Output : Not a Magic Matrix
Explanation:In matrix sum of each
row and each column and diagonals sum is
not same.

1. Find sum of prime diagonal and secondary diagonal.
2. Calculate sum of each rows and columns.
3. If the prime diagonal and secondary diagonal sums is equal to every row’s sum and every column’s sum, then it is magic matrix.

C++




// C++ program to check whether a given 
// matrix is magic matrix or not
#include <bits/stdc++.h>
  
#define N 3
using namespace std;
  
// Returns true if mat[][] is magic
// square, else returns false.
bool isMagicSquare(int mat[][N])
    // calculate the sum of 
    // the prime diagonal
    int sum = 0,sum2=0; 
    for (int i = 0; i < N; i++)
        sum = sum + mat[i][i];
    // the secondary diagonal
    for (int i = 0; i < N; i++)
        sum2 = sum2 + mat[i][N-1-i];
  
    if(sum!=sum2) 
        return false;
  
    // For sums of Rows 
    for (int i = 0; i < N; i++) {
          
        int rowSum = 0;     
        for (int j = 0; j < N; j++)
            rowSum += mat[i][j];
          
        // check if every row sum is
        // equal to prime diagonal sum
        if (rowSum != sum)
            return false;
    }
  
    // For sums of Columns
    for (int i = 0; i < N; i++) {
          
        int colSum = 0;     
        for (int j = 0; j < N; j++)
            colSum += mat[j][i];
  
        // check if every column sum is 
        // equal to prime diagonal sum
        if (sum != colSum) 
        return false;
    }
  
    return true;
}
  
// driver program to 
// test above function
int main()
{
    int mat[][N] = {{ 2, 7, 6 },
                    { 9, 5, 1 },
                    { 4, 3, 8 }};
      
    if (isMagicSquare(mat))
        cout << "Magic Square";
    else
        cout << "Not a magic Square";
      
    return 0;
}

Java




// JAVA program to check whether a given
// matrix is magic matrix or not
  
import java.io.*;
  
class GFG {
      
    static int N = 3;
      
    // Returns true if mat[][] is magic
    // square, else returns false.
    static boolean isMagicSquare(int mat[][])
    {
          
        // calculate the sum of
        // the prime diagonal
         int sum = 0,sum2=0
        for (int i = 0; i < N; i++)
            sum = sum + mat[i][i];
  
        // the secondary diagonal
        for (int i = 0; i < N; i++)
            sum2 = sum2 + mat[i][N-1-i];
  
        if(sum!=sum2) 
            return false;
  
        // For sums of Rows
        for (int i = 0; i < N; i++) {
  
            int rowSum = 0;
            for (int j = 0; j < N; j++)
                rowSum += mat[i][j];
  
            // check if every row sum is
            // equal to prime diagonal sum
            if (rowSum != sum)
                return false;
        }
  
        // For sums of Columns
        for (int i = 0; i < N; i++) {
  
            int colSum = 0;
            for (int j = 0; j < N; j++)
                colSum += mat[j][i];
  
            // check if every column sum is
            // equal to prime diagonal sum
            if (sum != colSum)
                return false;
        }
  
        return true;
    }
  
    // driver program to
    // test above function
    public static void main(String[] args)
    {
        int mat[][] = {{ 2, 7, 6 },
                       { 9, 5, 1 },
                       { 4, 3, 8 }};
  
        if (isMagicSquare(mat))
            System.out.println("Magic Square");
        else
            System.out.println("Not a magic" +
                                    " Square");
    }
}
// This code is contributed by vt_m

Python3




# Python3 program to check whether a given 
# matrix is magic matrix or not
N = 3
  
# Returns true if mat[][] is magic
# square, else returns false.
def isMagicSquare( mat) :
      
    # calculate the sum of 
    # the prime diagonal
    s = 0 
      
    for i in range(0, N) :
        s = s + mat[i][i]
  
    # the secondary diagonal
    s2 = 0
    for i in range(0, N) :
        s2 = s2 + mat[i][N-i-1]
  
    if(s!=s2) :
        return False
  
    # For sums of Rows 
    for i in range(0, N) :
        rowSum = 0;     
        for j in range(0, N) :
            rowSum += mat[i][j]
          
        # check if every row sum is
        # equal to prime diagonal sum
        if (rowSum != s) :
            return False
  
    # For sums of Columns
    for i in range(0, N):
        colSum = 0
        for j in range(0, N) :
            colSum += mat[j][i]
  
        # check if every column sum is 
        # equal to prime diagonal sum
        if (s != colSum) :
            return False
  
    return True
  
# Driver Code
mat = [ [ 2, 7, 6 ],
        [ 9, 5, 1 ],
        [ 4, 3, 8 ] ]
      
if (isMagicSquare(mat)) :
    print( "Magic Square")
else :
    print( "Not a magic Square")
# This code is contributed by Nikita Tiwari.    

C#




// C# program to check whether a given
// matrix is magic matrix or not
using System;
  
class GFG 
{
      
    static int N = 3;
      
    // Returns true if mat[][] is magic
    // square, else returns false.
    static bool isMagicSquare(int[,] mat)
    {
          
        // calculate the sum of
        // the prime diagonal
        int sum = 0, sum2 = 0;
  
        for (int i = 0; i < N; i++)
            sum = sum + mat[i, i];
  
        // the secondary diagonal
        for (int i = 0; i < N; i++)
            sum2 = sum2 + mat[i, N-1-i];
       
        if(sum!=sum2)
            return false;
  
        // For sums of Rows
        for (int i = 0; i < N; i++) {
  
            int rowSum = 0;
            for (int j = 0; j < N; j++)
                rowSum += mat[i, j];
  
            // check if every row sum is
            // equal to prime diagonal sum
            if (rowSum != sum)
                return false;
        }
  
        // For sums of Columns
        for (int i = 0; i < N; i++) 
        {
  
            int colSum = 0;
            for (int j = 0; j < N; j++)
                colSum += mat[j,i];
  
            // check if every column sum is
            // equal to prime diagonal sum
            if (sum != colSum)
                return false;
        }
  
        return true;
    }
  
    // Driver Code
    public static void Main()
    {
        int[,] mat =new int [,] {{ 2, 7, 6 },
                                 { 9, 5, 1 },
                                 { 4, 3, 8 }};
  
        if (isMagicSquare(mat))
            Console.WriteLine("Magic Square");
        else
            Console.WriteLine("Not a magic" +
                              " Square");
    }
}
// This code is contributed by KRV.

PHP




<?php
// PHP program to check whether a given 
// matrix is magic matrix or not
  
// Returns true if mat[][] is magic
// square, else returns false.
function isMagicSquare($mat)
{
      
    // calculate the sum of 
    // the prime diagonal
    $sum = 0; $N=3;
    for($i = 0; $i < $N; $i++)
        $sum = $sum + $mat[$i][$i];
  
    // the secondary diagonal
    $sum2 = 0; $N=3;
    for($i = 0; $i < $N; $i++)
        $sum2 = $sum2 + $mat[$i][$N-$i-1];
      
    if( $sum != $sum2)
        return false;
  
    // For sums of Rows 
    for($i = 0; $i < $N; $i++) 
    {
          
        $rowSum = 0;     
        for ($j = 0; $j < $N; $j++)
            $rowSum += $mat[$i][$j];
          
        // check if every row sum is
        // equal to prime diagonal sum
        if ($rowSum != $sum)
            return false;
    }
  
    // For sums of Columns
    for ($i = 0; $i < $N; $i++)
    {
          
        $colSum = 0;     
        for ($j = 0; $j < $N; $j++)
            $colSum += $mat[$j][$i];
  
        // check if every column sum is 
        // equal to prime diagonal sum
        if ($sum != $colSum
        return false;
    }
  
    return true;
}
  
// Driver Code
{
    $mat = array(array(2, 7, 6),
                   array(9, 5, 1),
                 array(4, 3, 8));
      
    if (isMagicSquare($mat))
        echo "Magic Square";
    else
        echo "Not a magic Square";
      
    return 0;
}
  
?>
// This code is contributed by nitin mittal
Magic square

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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :