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

सी ++ में मैट्रिक्स में अंतिम पंक्ति के किसी भी तत्व पर समाप्त होने वाला अधिकतम वजन पथ

इस समस्या में, हमें एक पूर्णांक n और आकार n X n का एक मैट्रिक्स दिया जाता है जिसमें सेल का भार होता है। हमारा काम एक प्रोग्राम बनाना है जो मैट्रिक्स में अंतिम पंक्ति के किसी भी तत्व पर समाप्त होने वाले अधिकतम वजन पथ को ढूंढेगा। पथ ढूंढते समय ट्रैवर्सल ऊपर-बाएं (0,0) से शुरू होगा और वैध चाल नीचे और विकर्ण होगी, किसी भी बाएं चाल की अनुमति नहीं है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट -

n = 3
Mat[3][3] ={
   {4, 3, 1}
   {5, 8, 9}
   {6, 7, 2}}

आउटपुट -

19

स्पष्टीकरण -

All paths that can be used will be
Path1: 4+5+6 = 15
Path2: 4+8+7 = 19
Path3: 4+8+2 = 12
Path4: 4+5+7 = 16

इनमें से सबसे अच्छा संभव पथ पथ 2 है जिसका वजन 19 है

तो, एक संभावित समाधान सभी पथों की गणना करना और फिर उनकी तुलना करना हो सकता है, लेकिन यह बड़ी संख्या में होने पर एक अक्षम दृष्टिकोण होगा।

एक प्रभावी समाधान गतिशील प्रोग्रामिंग का उपयोग करना होगा क्योंकि यह एक प्रकार की अतिव्यापी समस्या है। जड़ से शुरू होकर उनकी n शाखाएँ हैं जो वांछित परिणाम प्रदान कर सकती हैं।

हम एक मैट्रिक्स बनाएंगे जो मैट्रिक्स में उस सेल तक पहुंचने के लिए दिए गए पथों के अधिकतम भार को संग्रहीत करेगा।

यह हम करेंगे जो मैट्रिक्स की अंतिम पंक्ति में अधिकतम योग है और इसे प्रिंट करें।

उदाहरण

समस्या को हल करने के लिए कार्यक्रम,

#include<bits/stdc++.h>
using namespace std;
const int MAX = 1000;
int maxCost(int matrix[][MAX], int N) {
   int sumMat[N][N];
   memset(sumMat, 0, sizeof(sumMat));
   int maxSum = 0;
   sumMat[0][0] = matrix[0][0];
   for (int i=1; i<N; i++)
      sumMat[i][0] = matrix[i][0] + sumMat[i-1][0];
   for (int i=1; i<N; i++)
   for (int j=1; j<i+1&&j<N; j++)
      sumMat[i][j] = matrix[i][j] + max(sumMat[i-1][j-1], sumMat[i-1][j]);
   for (int i=0; i<N; i++)
      if (maxSum < sumMat[N-1][i]) maxSum = sumMat[N-1][i];
      return maxSum;
}
int main(){
   int mat[MAX][MAX] ={
      {5 , 6 , 1 },
      {2 , 11 , 10 },
      {15, 3 , 2 }};
   int N = 3;
   cout<<"Maximum Path Sum for top-left cell to last row is : "<<maxCost(mat, N)<<endl;
   return 0;
}

आउटपुट

Maximum Path Sum for top-left cell to last row is : 22

  1. सी ++ में मैट्रिक्स के किसी भी कॉलम में अधिकतम अंतर के साथ जोड़ी खोजें

    मान लीजिए कि हमारे पास एक मैट्रिक्स या ऑर्डर NxN है। हमें ऐसे तत्वों का एक युग्म खोजना है जो मैट्रिक्स के किसी भी स्तंभ से अधिकतम अंतर बनाते हैं। तो अगर मैट्रिक्स की तरह है - 1 2 3 5 3 5 9 6 7 तो आउटपुट 8 होगा। चूंकि जोड़ी कॉलम 0 से (1, 9) है। विचार सरल है, हमें बस प्रत्येक कॉलम के अधिकतम और

  1. सी ++ में मैट्रिक्स में प्रत्येक पंक्ति का अधिकतम तत्व खोजें

    मान लें कि हमारे पास एक मैट्रिक्स है, हमारा कार्य उस मैट्रिक्स की प्रत्येक पंक्ति के अधिकतम तत्व को खोजना और उन्हें प्रिंट करना है। यह कार्य सरल है। प्रत्येक पंक्ति के लिए, अधिकतम रीसेट करें, और अधिकतम तत्व ढूंढें, और इसे प्रिंट करें। आइए बेहतर समझ के लिए कोड देखें। उदाहरण #include<iostream> #

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

    मान लें कि हमारे पास एक मैट्रिक्स है, हमारा काम उस मैट्रिक्स के प्रत्येक कॉलम के अधिकतम तत्व को ढूंढना और उन्हें प्रिंट करना है। यह कार्य सरल है। प्रत्येक कॉलम के लिए, अधिकतम रीसेट करें, और अधिकतम तत्व ढूंढें, और इसे प्रिंट करें। आइए बेहतर समझ के लिए कोड देखें। उदाहरण #include<iostream> #defin