Maximum trace possible for any sub-matrix of the given matrix in C++


In this problem, we are given a two-dimensional array arr[][]. Our task is to create a program to find the Maximum trace possible for any sub-matrix of the given matrix in C++.

Problem Description

we need to find the maximum trace for any sub-matrix. The trace is the sum of elements of the main diagonal of the matrix.

Let’s take an example to understand the problem,

Input

arr[][] ={{-2, 5, 3},
          {1, 6, 2},
          {4, 3, 9}}

Output

15

Explanation

For the sub-array: {1, 6}
{9, 3}

Solution Approach

A simple solution is to find the max sum using the element of the main diagonal of the 2-D array. The trace is given by the max subarray sum.

Example

Program to illustrate the working of our solution,

 Live Demo

#include <iostream>
using namespace std;
#define row 3
#define col 3

int CalcMaxTraceSubMat(int mat[row][col]){
   int maxtraceSum = 0, r, c, traceSum;
   for (int i = 0; i < row; i++){
      for (int j = 0; j < col; j++){
         r = i, c = j, traceSum = 0;
         while (r < row && c < col){
            traceSum += mat[r][c];
            r++;
            c++;
            maxtraceSum = max(traceSum, maxtraceSum);
         }
      }
   }
   return maxtraceSum;
}
int main() {
   int mat[row][col] = { {-2, 5, 6},
                        {1, 6, 2},
                        {4, 3, 9} };

   cout<<"The maximum trace possible for any submatrix is "<<CalcMaxTraceSubMat(mat);
   return 0;
}

Output

The maximum trace possible for any submatrix is 15

Updated on: 15-Oct-2020

188 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements