C ++中矩阵的最大路径总和

在这个问题中,我们得到一个大小为M * N的二维矩阵。我们的任务是创建一个程序,该程序将在矩阵中找到最大路径总和。

在此,矩阵中的最大路径总和定义为一行到最后一行的所有元素的总和。穿过路径的允许移动为向下移动和对角线移动。起点和终点可以分别是矩阵第一行和最后一行的任何元素。

让我们以一个例子来了解问题

输入-

matrix [][] =
   3 5 9
   1 7 2
   4 8 6

输出-24

说明 -最大路径将是9→7→8。

为了解决这个问题,我们将从数组的顶部开始,找到第一行的最大元素,并将其存储到maxSum中。然后遍历矩阵并找到路径中出现的最大值。如果新值更大,则更新maxSum,否则不更新。一旦遍历整个矩阵并创建了路径,就返回maxSum

示例

程序在矩阵中找到最大路径总和-

#include <iostream>
#define N 3
#define M 3
using namespace std;
int maxPathSum(int mat[][M]){
   for (int i = 1; i < N; i++) {
      for (int j = 0; j < M; j++) {
         if (j > 0 && j < M - 1)
            mat[i][j] += max(mat[i - 1][j], max(mat[i - 1][j - 1],mat[i - 1][j + 1]));
         else if (j > 0)
            mat[i][j] += max(mat[i - 1][j],
            mat[i - 1][j - 1]);
         else if (j < M - 1)
            mat[i][j] += max(mat[i - 1][j],
            mat[i - 1][j + 1]);
      }
   }
   int maxSum = mat[N-1][0];
   for (int j = 1; j < M; j++)
   maxSum = max(mat[N-1][j], maxSum);
   return maxSum;
}
int main(){
   int matrix[N][M] = {
      {3, 5, 9 },
      {1, 7, 2},
      {4, 8, 6}};
   cout<<"The maximum path sum of matrix is : "<<maxPathSum(matrix);
   return 0;
}

输出结果

The maximum path sum of matrix is : 24