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

C++ में ट्री में किन्हीं दो शीर्षों की डिग्री के गुणनफल के योग को अधिकतम करना

दिया गया कार्य एक दिए गए पूर्णांक N के साथ एक ट्री का निर्माण करना है जैसे कि, सभी क्रमित जोड़े (x,y) के लिए degree(x) * degree(y) का योग अधिकतम हो और x, y के बराबर न हो।

इनपुट - N=5

आउटपुट - 50

व्याख्या

    1
     \
      2
       \
        3
         \
          4
           \
            5
पहले नोड की डिग्री = 1
दूसरे नोड की डिग्री = 2
तीसरे नोड की डिग्री = 2
चौथे नोड की डिग्री = 2
पांचवें नोड की डिग्री = 1

सभी क्रमित जोड़े (x, y) के लिए सभी डिग्री का गुणनफल:
पहला नोड = 1*2 + 1*2 + 1*2 + 1*1 = 7
दूसरा नोड = 2*1 + 2*2 + 2*2 + 2*1 = 12
तीसरा नोड = 2*1 + 2*2 + 2*2 + 2*1 = 12
चौथा नोड = 2*1 + 2*2 + 2*2 + 2*1 = 12
पांचवां नोड = 1*2 + 1*2 + 1*2 + 1*1 = 7
कुल योग = 50

इनपुट - N=7

आउटपुट - 122

प्रयुक्त दृष्टिकोण

  • ट्री में सभी नोड्स की डिग्री का योग = (2 * N) - 2। यहां N = ट्री में नोड्स की संख्या। योग को अधिकतम करने के लिए, पत्ती नोड्स की संख्या को न्यूनतम करना होगा।

  • Max() फंक्शन के अंदर int sum=0 आरंभ करें और x=1 और y=1 को आरंभ करके नेस्टेड लूप बनाएं जिनकी शर्तें x<=N और y<=N हों।

  • नेस्टेड लूप के अंदर पहले चेक करें यदि (x==y), यदि हां तो continue; स्टेटमेंट जोड़ें।

  • अन्यथा int degree=2 आरंभ करें और if स्टेटमेंट का उपयोग करके चेक करें यदि (x==1 || x==n)। यदि हां तो degreeX=1 रखें। फिर y वेरिएबल के लिए int degree=2 आरंभ करें और वही करें।

  • अंत में, लूप बंद करने से पहले, योग वेरिएबल को अपडेट करें: sum += (degreeX * degreeY)

C++ प्रोग्राम उदाहरण

#include <bits/stdc++.h>
using namespace std;

int Max(int N) {
    int sum = 0;
    for (int x = 1; x <= N; x++) {
        for (int y = 1; y <= N; y++) {
            if (x == y)
                continue;
            
            // नोड x के लिए डिग्री को 2 से आरंभ करना
            int degreeX = 2;
            // यदि x पत्ती नोड या रूट नोड है
            if (x == 1 || x == N)
                degreeX = 1;
            
            // नोड y के लिए डिग्री को 2 से आरंभ करना
            int degreeY = 2;
            // यदि y पत्ती नोड या रूट नोड है
            if (y == 1 || y == N)
                degreeY = 1;
            
            // योग अपडेट करना
            sum += (degreeX * degreeY);
        }
    }
    return sum;
}

int main() {
    int N = 5;
    cout << Max(N);
}

आउटपुट

50
  1. C++ में बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ का XOR C++ में बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ का XOR

    इस समस्या में, हमें एक बाइनरी ट्री और बाइनरी ट्री के दो नोड्स दिए गए हैं। हमारा कार्य उन सभी नोड्स का XOR प्रिंट करना है जो दो नोड्स के बीच पथ में आते हैं। आइए एक उदाहरण से समस्या को समझते हैं, हमें 2 और 3 के बीच सभी नोड्स का XOR खोजने की आवश्यकता है। 2 से 3 तक का पथ, 2 → 6 → 1 → 3। हम 2^3^1^3 ख

  1. C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें C++ में बाइनरी ट्री में निकटतम लीफ ढूंढें

    मान लीजिए, एक बाइनरी ट्री दिया गया है। इसमें अलग-अलग लेवल पर लीफ नोड्स हैं। एक और पॉइंटर दिया गया है, जो एक नोड को इंगित कर रहा है। हमें इंगित नोड से निकटतम लीफ नोड की दूरी ढूंढनी है। ट्री को नीचे जैसा मानें - यहां लीफ नोड्स 2, -2 और 6 हैं। यदि पॉइंटर नोड -5 पर इंगित कर रहा है, तो -5 से निकटतम नोड

  1. C++ प्रोग्राम: बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ प्रिंट करना

    हमें एक बाइनरी ट्री दिया गया है जिसके नोड्स विशिष्ट हैं और उस बाइनरी ट्री के दो नोड्स दिए गए हैं जिनके बीच का पथ हम प्रिंट करना चाहते हैं। उदाहरण के लिए - हम नोड 140 से 211 के बीच का पथ प्रिंट करना चाहते हैं तो इसका आउटपुट होना चाहिए - Output: 140->3->10->211 विचार यह है कि रूट नोड्स से दो