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]起点的数组所有这些元素的总和。然后找到所有由数组元素创建的沙漏的maxSum。

示例

该程序说明了我们解决方案的工作原理,

#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

以上是 C ++中矩阵中沙漏的最大和 的全部内容, 来源链接: utcz.com/z/354369.html

回到顶部