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

सी ++ में एक पेड़ में दो गैर-अंतर्विभाजक पथों का अधिकतम उत्पाद

इस समस्या में, हमें n नोड्स के साथ एक अप्रत्यक्ष कनेक्टेड ट्री T दिया जाता है। हमारा कार्य C++ में एक ट्री में दो गैर-अंतर्विभाजकपथों के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है।

समस्या का विवरण - एक पेड़ में दो अप्रतिच्छेदी पथों का अधिकतम गुणनफल ज्ञात करना। हम सभी गैर-दिलचस्प पथ खोजेंगे और फिर उनकी लंबाई का गुणनफल ज्ञात करेंगे।

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

इनपुट

ग्राफ़ -

सी ++ में एक पेड़ में दो गैर-अंतर्विभाजक पथों का अधिकतम उत्पाद

आउटपुट

8

स्पष्टीकरण

गैर-प्रतिच्छेदी पथ जिन पर विचार किया जाता है वे हैं C-A-B और F-E-D-G-H

लंबाई 2 और 4 हैं। उत्पाद =8.

समाधान दृष्टिकोण

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

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int TreeTraverse(vector<int> graph[], int& currPathMax, int val1, int val2){
   int max1 = 0, max2 = 0, maxVal = 0;
   for (int i = 0; i < graph[val1].size(); i++) {
      if (graph[val1][i] == val2)
         continue;
         maxVal = max(maxVal, TreeTraverse(graph, currPathMax,
      graph[val1][i], val1));
      if (currPathMax > max1) {
         max2 = max1;
         max1 = currPathMax;
      }
      else
         max2 = max(max2, currPathMax);
   }
   maxVal = max(maxVal, max1 + max2);
   currPathMax = max1 + 1;
   return maxVal;
}
int FindMaxProductPath(vector<int> graph[], int Size) {
   int maxProd = -10;
   int pathA, pathB;
   int currPathMax, prod;
   for (int i = 0; i < Size; i++) {
      for (int j = 0; j < graph[i].size(); j++){
         currPathMax = 0;
         pathA = TreeTraverse(graph, currPathMax, graph[i][j],i);
         currPathMax = 0;
         pathB = TreeTraverse(graph, currPathMax, i,graph[i][j]);
         prod = (pathA * pathB);
         maxProd = max(maxProd, prod);
      }
   }
   return maxProd;
}
void insertEdge(vector<int> graph[], int val1, int val2){
   graph[val1].push_back(val2);
   graph[val2].push_back(val1);
}
int main(){
   int Size = 8;
   vector<int> graph[Size + 2];
   insertEdge(graph, 1, 2);
   insertEdge(graph, 2, 4);
   insertEdge(graph, 3, 1);
   insertEdge(graph, 5, 4);
   insertEdge(graph, 7, 8);
   insertEdge(graph, 8, 4);
   insertEdge(graph, 5, 6);
   cout<<"Maximum product of two non-intersecting paths of tree is "<<FindMaxProductPath(graph, Size)<<"\n";
   return 0;
}

आउटपुट

Maximum product of two non-intersecting paths of tree is 8

  1. C++ में पेड़ का व्यास

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष पेड़ है; हमें इसका व्यास ज्ञात करना है - उस पेड़ के सबसे लंबे पथ में किनारों की संख्या उस पेड़ का व्यास है। यहां पेड़ को किनारे की सूची के रूप में दिया गया है जहां किनारों [i] =[यू, वी] नोड्स यू और वी के बीच एक द्विदिश किनारा है। प्रत्येक नोड में सेट {0, 1, ...,

  1. C++ में बाइनरी ट्री में अधिकतम स्तर का उत्पाद खोजें

    मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें सकारात्मक और नकारात्मक नोड्स हैं। हमें इसके प्रत्येक स्तर पर अधिकतम उत्पाद खोजना होगा। मान लीजिए कि यह पेड़ है, तो स्तर 0 का गुणनफल 4 है, स्तर 1 का गुणनफल 2 * -5 =-10 है, और स्तर 2 का गुणनफल -1 * 3 * -2 * 6 =36 है। तो यह है अधिकतम एक। इसे हल करने के ल

  1. C++ में बाइनरी ट्री में अधिकतम लम्बवत योग ज्ञात कीजिए

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। कार्य ऊर्ध्वाधर क्रम ट्रैवर्सल में सभी नोड्स के अधिकतम योग को प्रिंट करना है। तो अगर पेड़ नीचे जैसा है - लंबवत क्रम ट्रैवर्सल इस प्रकार है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग