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

C++ में मैट्रिक्स में शीर्ष से नीचे अधिकतम योग पथ


N x N मैट्रिक्स दिया गया है। शीर्ष पंक्ति से नीचे पंक्ति तक जाने वाला अधिकतम योग पथ ढूंढें, जहां प्रत्येक चरण में आप विकर्ण रूप से नीचे-बाएं या नीचे-दाएं जा सकते हैं।

उदाहरण 4x4 मैट्रिक्स के लिए अधिकतम योग 28 है।

समाधान दृष्टिकोण (बॉटम-अप DP)

  1. DP टेबल dp[n][n] बनाएं।
  2. अंतिम पंक्ति: dp[n-1][j] = mat[n-1][j]।
  3. पंक्ति n-2 से 0 तक ऊपर जाएं:
    • प्रत्येक कॉलम j के लिए, dp[i][j] = mat[i][j] + max(dp[i+1][j-1], dp[i+1][j+1]) (सीमा जांच के साथ)।
  4. उत्तर = max(dp[0][j]) सभी j के लिए।

C++ कार्यान्वयन

#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
  1. - C++ में mXn मैट्रिक्स के ऊपरी बाएं से निचले दाएं तक सभी संभावित पथ प्रिंट करना

    इस समस्या में, हमें एक mXn 2D मैट्रिक्स दिया गया है और हमें मैट्रिक्स के ऊपरी बाएं से निचले दाएं तक सभी संभावित पथ प्रिंट करने हैं। पारगमन के लिए, हम मैट्रिक्स में केवल दाएं और नीचे जा सकते हैं।आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं −Input: 1 3 5 2 8 9 Output: 1 -> 3 ->

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

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

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

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