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