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

C++ में ट्रिपलेट खोजें जिससे इन ट्रिपलेट्स को जोड़ने वाले नोड्स की संख्या अधिकतम हो


इस ट्यूटोरियल में, हम ट्रिपलेट खोजने के प्रोग्राम पर चर्चा करेंगे जिससे इन ट्रिपलेट्स को जोड़ने वाले नोड्स की संख्या अधिकतम हो।

इसके लिए हमें N नोड्स वाला एक ट्री प्रदान किया जाएगा। हमारा कार्य नोड्स का एक ट्रिपलेट खोजना है जिससे उन्हें जोड़ने वाले पथ में नोड्स की संख्या अधिकतम हो।

उदाहरण

#include <bits/stdc++.h> #define ll long long int #define MAX 100005 using namespace std; vector<int> nearNode[MAX]; bool isTraversed[MAX]; //आवश्यक नोड्स संग्रहीत करना int maxi = -1, N; int parent[MAX]; bool vis[MAX]; int startnode, endnode, midNode; //नोड्स खोजने के लिए DFS लागू करना void performDFS(int u, int count) { isTraversed[u] = true; int temp = 0; for (int i = 0; i < nearNode[u].size(); i++) { if (!isTraversed[nearNode[u][i]]) { temp++; performDFS(nearNode[u][i], count + 1); } } if (temp == 0) { if (maxi < count) { maxi = count; startnode = u; } } } void performDFS2(int u, int count) { isTraversed[u] = true; int temp = 0; for (int i = 0; i < nearNode[u].size(); i++) { if (!isTraversed[nearNode[u][i]] && !vis[nearNode[u][i]]) { temp++; performDFS2(nearNode[u][i], count + 1); } } if (temp == 0) { if (maxi < count) { maxi = count; midNode = u; } } } //व्यास के एंडनोड को खोजना void performDFS1(int u, int count) { isTraversed[u] = true; int temp = 0; for (int i = 0; i < nearNode[u].size(); i++) { if (!isTraversed[nearNode[u][i]]) { temp++; parent[nearNode[u][i]] = u; performDFS1(nearNode[u][i], count + 1); } } if (temp == 0) { if (maxi < count) { maxi = count; endnode = u; } } } void calcTreeVertices() { performDFS(1, 0); for (int i = 0; i <= N; i++) isTraversed[i] = false; maxi = -1; performDFS1(startnode, 0); for (int i = 0; i <= N; i++) isTraversed[i] = false; int x = endnode; vis[startnode] = true; while (x != startnode) { vis[x] = true; x = parent[x]; } maxi = -1; for (int i = 1; i <= N; i++) { if (vis[i]) performDFS2(i, 0); } } int main() { N = 4; nearNode[1].push_back(6); nearNode[2].push_back(0); nearNode[1].push_back(7); nearNode[3].push_back(0); nearNode[1].push_back(2); nearNode[4].push_back(0); calcTreeVertices(); cout << "Nodes: (" << startnode << ", " << endnode << ", " << midNode << ")"; return 0; }

आउटपुट

Nodes: (0, 0, 0)

  1. - C++ का उपयोग करके सरणी में ऐसा तत्व खोजें जिससे सभी तत्व विभाज्य हों

    मान लीजिए हमारे पास कुछ तत्वों के साथ एक सरणी A है। हमें A से एक ऐसा तत्व ढूंढना है जिससे सभी तत्व इससे विभाज्य हों। मान लीजिए A = [15, 21, 69, 33, 3, 72, 81] है, तो तत्व 3 होगा, क्योंकि सभी संख्याएं 3 से विभाज्य हैं। इस समस्या को हल करने के लिए, हम A में सबसे छोटी संख्या लेंगे, फिर जांचेंगे कि क्य

  1. - C++ का उपयोग करके एक संख्या x खोजें जिसके अंकों का योग x के बराबर दिए गए n के बराबर हो

    यहां हम एक समस्या देखेंगे, जहां हम एक संख्या n लेते हैं, हमें एक अन्य मान x ढूंढना है, जैसे कि x + x के अंकों का योग दी गई संख्या n के बराबर हो। मान लीजिए n का मान 21 है। यह प्रोग्राम x = 15 लौटाएगा, क्योंकि 15 + 15 के अंकों का योग (1+5) = 21 = n होता है। इसे हल करने के लिए, हमें सरल दृष्टिकोण अपना

  1. - C++ में दी गई संख्या n के लिए x ढूंढें जहां x + अंकों का योग = n

    समस्या विवरण एक संख्या n दी गई है, हमें एक मान x ढूंढना है जिससे x + x के अंकों का योग = n हो। उदाहरण के लिए, n = 21 के लिए, x = 15 होगा क्योंकि 15 + (1+5) = 21। हल दृष्टिकोण सरल दृष्टिकोण: 1 से n तक पुनरावृति करें, प्रत्येक संख्या के लिए जांचें कि क्या संख्या + उसके अंकों का योग = n है। यदि हां,