Maximum XOR value in matrix - GeeksforGeeks

30 Apr, 2021
Given a square matrix (N X N), the task is to find the maximum XOR value of a complete row or a complete column.Examples :  
Input :  N = 3 
        mat[3][3] = {{1, 0, 4},
                    {3, 7, 2},
                    {5, 9, 10} };
Output : 14
We get this maximum XOR value by doing XOR 
of elements in second column 0 ^ 7 ^ 9 = 14

Input : N = 4 
        mat[4][4] = { {1, 2, 3, 6},
                      {4, 5, 6,7},
                      {7, 8, 9, 10},
                      {2, 4, 5, 11}}
Output : 12 
 
A simple solution of this problem is we can traverse the matrix twice and calculate maximum xor value row-wise & column wise ,and at last return the maximum between (xor_row , xor_column).A efficient solution is we can traverse matrix only one time and calculate max XOR value .  
Start traverse the matrix and calculate XOR at each index row and column wise. We can compute both values by using indexes in reverse way. This is possible because matrix is a square matrix.Store the maximum of both.
Start traverse the matrix and calculate XOR at each index row and column wise. We can compute both values by using indexes in reverse way. This is possible because matrix is a square matrix.
Store the maximum of both.
Below is the implementation :  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to Find maximum XOR value in// matrix either row / column wise#include<iostream>using namespace std; // maximum number of row and columnconst int MAX = 1000; // function return the maximum xor value that is// either row or column wiseint maxXOR(int mat[][MAX], int N){    // for row xor and column xor    int r_xor, c_xor;    int max_xor = 0;     // traverse matrix    for (int i = 0 ; i < N ; i++)    {        r_xor = 0, c_xor = 0;        for (int j = 0 ; j < N ; j++)        {            // xor row element            r_xor = r_xor^mat[i][j];             // for each column : j is act as row & i            // act as column xor column element            c_xor = c_xor^mat[j][i];        }         // update maximum between r_xor , c_xor        if (max_xor < max(r_xor, c_xor))            max_xor = max(r_xor, c_xor);    }     // return maximum xor value    return max_xor;} // driver Codeint main(){    int N = 3;     int mat[][MAX] = {{1 , 5, 4},                      {3 , 7, 2 },                      {5 , 9, 10}    };     cout << "maximum XOR value : "         << maxXOR(mat, N);    return 0;}
// Java program to Find maximum XOR value in// matrix either row / column wiseclass GFG {         // maximum number of row and column    static final int MAX = 1000;         // function return the maximum xor value    // that is either row or column wise    static int maxXOR(int mat[][], int N)    {                 // for row xor and column xor        int r_xor, c_xor;        int max_xor = 0;             // traverse matrix        for (int i = 0 ; i < N ; i++)        {            r_xor = 0; c_xor = 0;                         for (int j = 0 ; j < N ; j++)            {                                 // xor row element                r_xor = r_xor^mat[i][j];                     // for each column : j is act as row & i                // act as column xor column element                c_xor = c_xor^mat[j][i];            }                 // update maximum between r_xor , c_xor            if (max_xor < Math.max(r_xor, c_xor))                max_xor = Math.max(r_xor, c_xor);        }             // return maximum xor value        return max_xor;    }         //driver code    public static void main (String[] args)    {                 int N = 3;             int mat[][] = { {1, 5, 4},                        {3, 7, 2},                        {5, 9, 10}};             System.out.print("maximum XOR value : "            + maxXOR(mat, N));    }} // This code is contributed by Anant Agarwal.
# Python3 program to Find maximum# XOR value in matrix either row / column wise # maximum number of row and columnMAX = 1000  # Function return the maximum# xor value that is either row# or column wisedef maxXOR(mat, N):     # For row xor and column xor    max_xor = 0      # Traverse matrix    for i in range(N):             r_xor = 0        c_xor = 0        for j in range(N):                     # xor row element            r_xor = r_xor ^ mat[i][j]              # for each column : j is act as row & i            # act as column xor column element            c_xor = c_xor ^ mat[j][i]                   # update maximum between r_xor , c_xor        if (max_xor < max(r_xor, c_xor)):            max_xor =  max(r_xor, c_xor)      # return maximum xor value    return max_xor  # Driver CodeN = 3  mat= [[1 , 5, 4],      [3 , 7, 2 ],      [5 , 9, 10]]  print("maximum XOR value : ",              maxXOR(mat, N))               # This code is contributed by Anant Agarwal.
// C# program to Find maximum XOR value in// matrix either row / column wiseusing System; class GFG{         // maximum number of row and column          // function return the maximum xor value    // that is either row or column wise    static int maxXOR(int [,]mat, int N)    {                 // for row xor and column xor        int r_xor, c_xor;        int max_xor = 0;             // traverse matrix        for (int i = 0 ; i < N ; i++)        {            r_xor = 0; c_xor = 0;                         for (int j = 0 ; j < N ; j++)            {                                 // xor row element                r_xor = r_xor^mat[i, j];                     // for each column : j is act as row & i                // act as column xor column element                c_xor = c_xor^mat[j, i];            }                 // update maximum between r_xor , c_xor            if (max_xor < Math.Max(r_xor, c_xor))                max_xor = Math.Max(r_xor, c_xor);        }             // return maximum xor value        return max_xor;    }         // Driver code    public static void Main ()    {                 int N = 3;             int [,]mat = { {1, 5, 4},                        {3, 7, 2},                        {5, 9, 10}};             Console.Write("maximum XOR value : "            + maxXOR(mat, N));    }} // This code is contributed by nitin mittal.
<?php// PHP program to Find// maximum XOR value in// matrix either row or// column wise // maximum number of// row and column$MAX = 1000; // function return the maximum// xor value that is either// row or column wisefunction maxXOR($mat, $N){         // for row xor and    // column xor    $r_xor; $c_xor;    $max_xor = 0;     // traverse matrix    for ($i = 0 ; $i < $N ; $i++)    {        $r_xor = 0; $c_xor = 0;        for ($j = 0 ; $j < $N ; $j++)        {                         // xor row element            $r_xor = $r_xor^$mat[$i][$j];             // for each column : j            // is act as row & i            // act as column xor            // column element            $c_xor = $c_xor^$mat[$j][$i];        }         // update maximum between        // r_xor , c_xor        if ($max_xor < max($r_xor, $c_xor))            $max_xor = max($r_xor, $c_xor);    }     // return maximum    // xor value    return $max_xor;}     // Driver Code    $N = 3;    $mat = array(array(1, 5, 4),                 array(3, 7, 2),                 array(5, 9, 10));     echo "maximum XOR value : "        , maxXOR($mat, $N); // This code is contributed by anuj_67.?>
<script> // Javascript program to Find// maximum XOR value in// matrix either row / column wise // maximum number of row and columnconst MAX = 1000; // function return the maximum// xor value that is// either row or column wisefunction maxXOR(mat, N){    // for row xor and column xor    let r_xor, c_xor;    let max_xor = 0;     // traverse matrix    for (let i = 0 ; i < N ; i++)    {        r_xor = 0, c_xor = 0;        for (let j = 0 ; j < N ; j++)        {            // xor row element            r_xor = r_xor^mat[i][j];             // for each column : j            // is act as row & i            // act as column xor            // column element            c_xor = c_xor^mat[j][i];        }         // update maximum between r_xor , c_xor        if (max_xor < Math.max(r_xor, c_xor))            max_xor = Math.max(r_xor, c_xor);    }     // return maximum xor value    return max_xor;} // driver Code    let N = 3;     let mat = [[1 , 5, 4],                      [3 , 7, 2 ],                      [5 , 9, 10]];     document.write("maximum XOR value : "         + maxXOR(mat, N)); </script>
Output :  
maximum XOR value  : 12
Time complexity : O(N*N) space complexity : O(1)This article is contributed by Nishant_Singh(Pintu). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.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. 
nitin mittal
vt_m
souravmahato348
Bitwise-XOR
Matrix
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Sudoku | Backtracking-7
Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)
Program to multiply two matrices
Count all possible paths from top left to bottom right of a mXn matrix
Min Cost Path | DP-6
Printing all solutions in N-Queen Problem
The Celebrity Problem
Python program to multiply two matrices
Gold Mine Problem
Multiplication of two Matrices in Single line using Numpy in Python