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

अधिकतम औसत मान के साथ C++ पथ

इस समस्या में 2 डी मैट्रिक्स को देखते हुए, और हमें अधिकतम औसत मान वाले पथ खोजने की आवश्यकता है। पथ के लिए, हमारा स्रोत सबसे ऊपरी बायां कक्ष है, और गंतव्य सबसे निचला दायां कक्ष है, उदाहरण के लिए -

Input : Matrix = [1, 2, 3
4, 5, 6
7, 8, 9]
Output : 5.8
Path with maximum average is, 1 -> 4 -> 7 -> 8 -> 9
Sum of the path is 29 and average is 29/5 = 5.8
. है

इस समस्या में हमें केवल दाएं या नीचे की ओर जाने की अनुमति होती है। यह हमारी समस्या को आसान बनाता है क्योंकि हम जानते हैं कि हमें दाईं ओर जाने के लिए N-1 की आवश्यकता है और N-1 अपने गंतव्य तक पहुंचने के लिए नीचे की ओर जाता है। यह सबसे छोटा वैध मार्ग है, ताकि हम इन अवलोकनों द्वारा अपना दृष्टिकोण विकसित कर सकें।

समाधान खोजने के लिए दृष्टिकोण

इस दृष्टिकोण में, हमें अधिकतम पथ योग की गणना करने के लिए गतिशील प्रोग्रामिंग लागू करने की आवश्यकता है क्योंकि हर तय है।

उदाहरण

उपरोक्त दृष्टिकोण के लिए C++ कोड

#include <bits/stdc++.h>
using namespace std;
int maximumPathSum(int cost[][3], int n){ // our function that return maximum average
    int dp[n+1][n+1];
    dp[0][0] = cost[0][0];
    for (int i = 1; i < n; i++) // initializing the first column of our dp matrix
        dp[i][0] = dp[i-1][0] + cost[i][0];
    for (int j = 1; j < n; j++) // initializing the first row of our dp matrix
        dp[0][j] = dp[0][j-1] + cost[0][j];
    for (int i = 1; i < n; i++) // constructing the rest of our matrix
        for (int j = 1; j <= n; j++)
            dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + cost[i][j];
    return dp[n-1][n-1]; // now we divide the maximum path sum with the number of moves
}
int main(){
   int cost[3][3] = { {1, 2, 3}, {4, 5, 6},{7, 8, 9}};// given grid
   int n = 3; // order of our matrix
   printf("%.1f", float(maximumPathSum(cost, n)) / float((2*n-1)));
   return 0;
}

आउटपुट

5.8

उपरोक्त कोड की व्याख्या

उपरोक्त दृष्टिकोण में, हमने देखा कि हम जो अधिकतम चालें लेते हैं, वे (2*n) - 1 के बराबर हैं, जहां n अब हमारे लागत मैट्रिक्स का क्रम है क्योंकि अब हमारे पास एक निश्चित भाजक है। इसलिए, हमें अधिकतम पथ योग की गणना करने की आवश्यकता है। अब, यह क्लासिक dp समस्याओं में से एक है, और हम इसका उपयोग करके इसे हल करते हैं, और फिर हम अपना परिणाम प्रिंट करते हैं।

निष्कर्ष

इस ट्यूटोरियल में, हम अधिकतम औसत मान वाले पथ को खोजने के लिए एक समस्या का समाधान करते हैं। हमने इस समस्या के लिए C++ प्रोग्राम और संपूर्ण दृष्टिकोण (Normal) भी सीखा जिसके द्वारा हमने इस समस्या को हल किया। हम उसी प्रोग्राम को अन्य भाषाओं जैसे सी, जावा, पायथन और अन्य भाषाओं में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगा होगा।


  1. सी ++ पथ लंबाई जिसमें अधिकतम संख्या में मोड़ हैं

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

  1. C++ में दिए गए मान के साथ पत्ते हटाएं

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

  1. उस नोड का पता लगाएं जिसका एक्स के साथ पूर्ण अंतर सी ++ में अधिकतम मूल्य देता है

    मान लीजिए कि हमारे पास एक पेड़ है, और सभी नोड्स का वजन और एक पूर्णांक x है। हमें नोड i को खोजना है, जैसे |वेट[i] - x| न्यूनतम है। यदि ग्राफ नीचे जैसा है, और x =15 आउटपुट 3 होगा। अब विभिन्न नोड्स के लिए, यह नीचे जैसा होगा नोड 1, |5 - 15| =10 नोड 2, |10 - 15| =5 नोड 3, |11 - 15| =4 नोड 4, |8 -