Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में मैट्रिक्स में शीर्ष से नीचे अधिकतम योग पथ (Maximum sum path in a matrix from top to bottom)


समस्या कथन

एक n*n मैट्रिक्स पर विचार करें। मान लीजिए मैट्रिक्स में प्रत्येक सेल को एक मान दिया गया है। हम पंक्ति i में प्रत्येक सेल से पंक्ति i+1 में केवल विकर्ण रूप से उच्च सेल पर जा सकते हैं [यानी सेल(i, j) से सेल(i+1, j-1) और सेल(i+1, j+1) केवल]। उक्त शर्त का पालन करते हुए शीर्ष पंक्ति से नीचे की पंक्ति तक का पथ ढूंढें जिससे अधिकतम योग प्राप्त हो।

उदाहरण

यदि दिया गया इनपुट है:
{ 
    {5, 6, 1, 17},
    {-2, 10, 8, -1},
    {3, -7, -9, 4},
    {12, -4, 2, 2}
}
अधिकतम योग है (17 + 8 + 4 + 2) = 31

एल्गोरिदम

  • विचार पहली पंक्ति के प्रत्येक सेल से शुरू होने वाले सभी पथों का अधिकतम योग ढूंढना है और अंत में पहली पंक्ति में सभी मानों का अधिकतम वापस करना है।
  • हम डायनामिक प्रोग्रामिंग का उपयोग करते हैं क्योंकि कई उप-समस्याओं के परिणाम बार-बार आवश्यक होते हैं।

उदाहरण

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

#define SIZE 10

int getMaxMatrixSum(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, 17},
        {-2, 10, 8, -1},
        {3, -7, -9, 4},
        {12, -4, 2, 2}
    };
    int n = 4;
    cout << "अधिकतम योग = " << getMaxMatrixSum(mat, n) << endl;
    return 0;
}

आउटपुट

अधिकतम योग = 31
  1. - C++ में त्रिभुज में अधिकतम पथ योग

    इस समस्या में, हमें संख्याएँ त्रिभुज के रूप में दी गई हैं। हमारा कार्य एक प्रोग्राम बनाना है जो त्रिभुज में अधिकतम पथ योग ढूंढेगा। तत्वों को पहली पंक्ति से 1 तत्व के साथ व्यवस्थित किया जाता है और फिर अगली पंक्तियों में तत्वों की बढ़ती संख्या के साथ जब तक nवीं पंक्ति में तत्व नहीं होते। इसलिए, प्रोग

  1. C++ में बाइनरी ट्री में अधिकतम पथ योग C++ में बाइनरी ट्री में अधिकतम पथ योग

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है जिसमें प्रत्येक नोड एक मान रखता है। हमारा कार्य बाइनरी ट्री के दो पत्तों के बीच अधिकतम पथ योग ढूंढने के लिए एक प्रोग्राम बनाना है। यहां, हमें एक पत्ते नोड से दूसरे पत्ते नोड तक का पथ ढूंढना है जो मानों का अधिकतम योग प्रदान करेगा। यह अधिकतम योग पथ रूट न

  1. - C++ का उपयोग करके मैट्रिक्स में अधिकतम योग वाला कॉलम खोजें

    मान लीजिए हमारे पास M x N आकार का एक मैट्रिक्स है। हमें वह कॉलम ढूंढना है जिसका योग अधिकतम है। इस प्रोग्राम में हम किसी ट्रिकी दृष्टिकोण का पालन नहीं करेंगे, बल्कि सरणी को कॉलम-वार पार करेंगे, प्रत्येक कॉलम का योग प्राप्त करेंगे, और यदि योग अधिकतम है, तो उस योग और कॉलम इंडेक्स को प्रिंट करेंगे। उदा