Mar 7, 2022

Maximum sum sub matrix

 #include <iostream>

using namespace std;



void resetArray(int a[], int row)

{

    for(int i=0; i<row; i++)

    {

        a[i] = 0;

    }

}


void printMatrix(int a[4][4], int maxleft, int maxright, int maxup, int maxdown)

{

    cout << "\n";

    for(int i=maxup; i<=maxdown; i++)

    {

        for(int j=maxleft; j<= maxright; j++)

        {

            cout << a[i][j] << " ";

        }

        cout << endl;

    }

}


void maxSumSubMatrix(int a[4][4], int row, int col)

{

    int sum = 0, maxSum = 0;

    

    int sumColumn[row];


    int maxleft = 0, maxright = 0,  maxup = 0, maxdown = 0;

    int curup = 0;

    

    for(int i=0; i<col; i++)

    {

        resetArray(sumColumn, row);

        for(int j=i; j<col; j++)

        {

            sum = 0;

            curup = 0;

            for(int k=0; k<row; k++)

            {

                // cout << endl << sumColumn[k] << " + " << a[k][j] << "=";

                sumColumn[k] += a[k][j];

                // cout << sumColumn[k];

                sum += sumColumn[k];

                // cout << "  sumsofar=" << sum ;

                if(sum > maxSum)

                {

                    maxSum = sum;

                    maxleft = i;

                    maxright = j;

                    maxdown = k;

                    maxup = curup;

                    

                    // cout << " i:" << i << " j:" << j;

                    // cout << " maxsum:" << maxSum << " sum:" << sum;

                    // cout << " maxleft:" << maxleft << " maxright:" << maxright;

                    // cout << " maxup:" << maxup << " maxdown:" << maxdown << endl;

                }

                else if(sum <= 0)

                {

                    sum = 0;

                    curup = k+1;

                }                

            }

        }

    }

    

    printMatrix(a, maxleft, maxright, maxup, maxdown);

}


int main() {

// your code goes here

int a[4][4] = {

        1, -2,-1, 3,

        3,-6, 7, -4,

   -5, 3, 0, 2,

    -4, 5,-2, 1

};

printMatrix(a, 0, 3, 0, 3);

cout << "Maximum sum sub matrix is: " << endl;

maxSumSubMatrix(a, 4, 4);

return 0;

}


No comments: