Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Maximum sum path in a matrix from top to bottom in C++ Program


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมหาเส้นทางผลรวมสูงสุดในเมทริกซ์จากด้านบนไปด้านล่าง

เราจะได้รับเมทริกซ์ขนาด N*N งานคือหาเส้นทางผลรวมสูงสุดจากแถวบนสุดไปแถวล่างสุด โดยเคลื่อนที่ได้เฉพาะทแยงมุมลงขวาหรือลงซ้าย

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

#define SIZE 10

int maxSum(int mat[SIZE][SIZE], int n) {
    if (n == 1) return mat[0][0];
    int dp[n][n];
    int maxSum = INT_MIN, max;
    for (int j = 0; j < n; j++)
        dp[n - 1][j] = mat[n - 1][j];
    for (int i = n - 2; i >= 0; i--) {
        for (int j = 0; j < n; j++) {
            max = INT_MIN;
            if ((j - 1) >= 0 && max < dp[i + 1][j - 1]) max = dp[i + 1][j - 1];
            if ((j + 1) < n && max < dp[i + 1][j + 1]) max = dp[i + 1][j + 1];
            dp[i][j] = mat[i][j] + max;
        }
    }
    for (int j = 0; j < n; j++)
        if (maxSum < dp[0][j]) maxSum = dp[0][j];
    return maxSum;
}

int main() {
    int mat[SIZE][SIZE] = {
        {5, 6, 1, 7},
        {-2, 10, 8, -1},
        {3, -7, -9, 11},
        {12, -4, 2, 6}
    };
    int n = 4;
    cout << "Maximum Sum = " << maxSum(mat, n);
    return 0;
}

เอาต์พุต

Maximum Sum = 28