C++ 中给定矩阵任意子矩阵的最大迹

c++server side programmingprogramming

本题中,给定一个二维数组 arr[][]。我们的任务是编写一个程序,用 C++ 语言求出给定矩阵任意子矩阵的最大迹。

问题描述

我们需要求任意子矩阵的最大迹。迹是矩阵主对角线元素之和。

我们举个例子来理解这个问题:

输入

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

输出

15

解释

对于子数组:{1, 6}
{9, 3}

解决方法

一个简单的解决方案是使用二维数组主对角线的元素来找到最大和。迹由最大子数组和给出。

示例

程序演示我们的解决方案的工作原理,

#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;
}

输出

The maximum trace possible for any submatrix is 15

相关文章