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

C++ में पथ योग IV


मान लीजिए हमारे पास पूर्णांकों की एक सूची है जो गहराई 5 से कम वाले बाइनरी ट्री को दर्शाती है। यदि ट्री की गहराई 5 से कम है, तो इस ट्री को तीन अंकों वाले पूर्णांकों की सूची द्वारा दर्शाया जा सकता है। इस सूची में प्रत्येक पूर्णांक के लिए:

  • सैकड़ों अंक इस नोड की गहराई D को दर्शाता है, 1 <= D <= 4।
  • दहाई अंक इस नोड की स्थिति P को उस स्तर में दर्शाता है जिसका वह संबंध रखता है, सीमा 1 से 8। स्थिति पूर्ण बाइनरी ट्री के समान है।
  • इकाई अंक इस नोड के मान V को दर्शाता है, 0 <= V <= 9।

हमें रूट से पत्तियों तक सभी पथों का योग ज्ञात करना है।

उदाहरण के लिए, यदि इनपुट [113, 215, 221] है, तो आउटपुट 12 होगा। ट्री जो सूची दर्शाती है:

C++ में पथ योग IV

पथ योग (3 + 5) + (3 + 1) = 12 है।

हल करने की विधि

हम एक मैप का उपयोग करके ट्री का निर्माण करेंगे और फिर DFS करेंगे:

  • स्तर के अनुसार नोड्स संग्रहीत करने के लिए एक मैप graph परिभाषित करें।
  • dfs() फ़ंक्शन नोड, स्तर, स्थिति, और वर्तमान योग लेता है।
  • अगले स्तर के बच्चों की जांच करें जिनकी स्थिति वर्तमान स्थिति के आधे के बराबर है।
  • यदि लीफ नोड है, तो योग को परिणाम में जोड़ें।
  • मुख्य विधि में:
    • प्रत्येक संख्या को पार्स करें: मान, स्थिति, स्तर निकालें।
    • graph[स्तर] में (स्थिति, मान) जोड़ें।
    • रूट से dfs शुरू करें।
    • परिणाम लौटाएं।

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; class Solution { public:    int ret;    map <int, vector < pair <int, int> > > graph;    void dfs(int node, int level, int pos, int sum = 0){       bool isLeaf = true;       for (int i = 0; i < graph[level + 1].size(); i++) {          pair<int, int> temp = graph[level + 1][i];          if (temp.first / 2 == pos) {             isLeaf = false;             dfs(temp.second, level + 1, temp.first, sum + node);          }       }       if (isLeaf) {          ret += (sum + node);       }    }    int pathSum(vector<int>& nums) {       ret = 0;       for (int i = 0; i < nums.size(); i++) {          int x = nums[i];          int val = x % 10;          x /= 10;          int pos = x % 10;          x /= 10;          int level = x;          graph[level].push_back({ (1 << (level - 1)) + pos - 1, val });       }       dfs(graph[1][0].second, 1, graph[1][0].first);       return ret;    } }; main(){    Solution ob;    vector<int> v = {113,215,221};    cout<<(ob.pathSum(v)); }

इनपुट

{113,215,221}

आउटपुट

12

  1. C++ में पाथ सम III - रूट से लीफ तक दिए गए योग वाले पाथ ढूंढना C++ में पाथ सम III - रूट से लीफ तक दिए गए योग वाले पाथ ढूंढना

    मान लीजिए हमारे पास एक बाइनरी ट्री है जिसमें प्रत्येक नोड एक पूर्णांक मान रखता है। हमें उन पाथ को ढूंढना है जिनका योग दिए गए मान के बराबर हो। पाथ रूट से लीफ तक होना चाहिए। समस्या विवरण यदि ट्री है [5,4,8,11,null,13,4,7,2,null,null,5,1] और योग 22 है, तो परिणाम होगा - पाथ हैं: [[5,4,11,2],[5,8,4,5]

  1. - C++ में ट्रायंगल में न्यूनतम सम पथ

    समस्या कथन संख्याओं की एक त्रिकोणीय संरचना दी गई है, शीर्ष से नीचे तक न्यूनतम पथ योग ढूंढें। प्रत्येक चरण में आप नीचे की पंक्ति पर आसन्न संख्याओं पर जा सकते हैं। उदाहरण यदि इनपुट है - 5 7 3 8 1 2 9 6 4 5 तो न्यूनतम योग 13 है जैसा कि नीचे दिया गया है - 5 + 3 + 1 + 4 एल्गोरिदम डायनामिक प

  1. - C++ में सम ऐरे पजल (बिना घटाव ऑपरेटर के)

    यहां हम ऐरे से संबंधित एक रोचक समस्या देखेंगे। n तत्वों वाला एक ऐरे है। हमें n तत्वों का एक और ऐरे बनाना है। लेकिन दूसरे ऐरे का i-th स्थान पहले ऐरे के i-th तत्व को छोड़कर सभी तत्वों का योग रखेगा। और एक प्रतिबंध है कि हम इस समस्या में घटाव ऑपरेटर का उपयोग नहीं कर सकते। यदि हम घटाव ऑपरेशन का उपयोग कर