矩阵中沙漏的最大和 C++
在本问题中,我们给定一个矩阵。我们的任务是创建一个程序,找到 C++ 中矩阵中沙漏的最大和。
程序说明 − 在这里,我们将找到可以为给定矩阵元素创建的所有沙漏的最大和。
沙漏是以以下形式在矩阵中制作的 7 个元素形状,
X X X X X X X
我们举一个例子来理解这个问题,
输入 −
array ={ {2 4 0 0} {0 1 1 0} {4 2 1 0} {0 3 0 1}}
输出 −
解释 −
Hour glass are : 2 4 0 0 1 1 1 2 4 2 1 0 3 0 4 0 0 1 1 0 1 1 2 1 0 3 0 1
因此,可以用以下索引创建沙漏,
matrix[i][j] matrix[i][j+1] matrix[i][j+2] matrix[i+1][j+1] matrix[i+2][j] matrix[i+2][j+1] matrix[i+2][j+2]
我们将找到从 [0][0] 到 [R2][C-2] 起点的数组的所有这些元素的和。找到由数组元素创建的所有这些沙漏的最大和。
示例
程序说明我们解决方案的工作原理,
#include<iostream> using namespace std; const int row = 4; const int col = 4; int findHourGlassSum(int mat[row][col]){ if (row<3 || col<3) return -1; int maxSum = 0; for (int i=0; i<row-2; i++){ for (int j=0; j<col-2; j++){ int hrSum = (mat[i][j]+mat[i][j+1]+mat[i][j+2])+ (mat[i+1][j+1])+ (mat[i+2][j]+mat[i+2][j+1]+mat[i+2][j+2]); maxSum = max(maxSum, hrSum); } } return maxSum; } int main() { int mat[row][col] = { {2, 4, 0, 0}, {0, 1, 1, 0}, {4, 2, 1, 0}, {0, 3, 0, 1}}; int maxSum = findHourGlassSum(mat); if (maxSum == -1) cout<<"Not possible"; else cout<<"Maximum sum of hour glass created is "<<maxSum; return 0; }
输出
Maximum sum of hour glass created is 14
广告