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

सी ++ में जंगल में पेड़ों की संख्या गिनें


जंगल के शीर्षों को देखते हुए (पेड़ों का संग्रह)। लक्ष्य उस जंगल में पेड़ों की संख्या ज्ञात करना है। हम जंगल पर DFS (गहराई से पहली खोज) एल्गोरिथम चलाकर ऐसा करेंगे।

उदाहरण के लिए

इनपुट

edges = { { 1,3 }, {2,8}, {2,6}, {3,5}, {3,7}, {4,8} }

आउटपुट

Count of number of trees in a forest are: 3

स्पष्टीकरण

जंगल में मौजूद पेड़ों की संख्या है -

सी ++ में जंगल में पेड़ों की संख्या गिनें

नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -

इस दृष्टिकोण में हम पुनरावर्ती रूप से ग्राफ़ पर डेप्थ फ़र्स्ट सर्च एल्गोरिथम लागू करते हैं। यदि प्रत्येक कनेक्टेड नोड को एक स्रोत से विज़िट किया गया चिह्नित किया जाता है (जिसका अर्थ है कि एक पेड़ बनता है) तो हम गिनती बढ़ाएंगे।

  • ग्राफ़ पर एक पूर्णांक शीर्ष को कई शीर्षों के रूप में लें।

  • शीर्षों को पूर्णांकों के रूप में संग्रहीत करने के लिए एक सदिश वेक्टर vec[vertice] लें।

  • फ़ंक्शन डालने (वेक्टर vec [], int माता-पिता, int बच्चा) vec [] लेता है और उस वेक्टर में नोड्स माता-पिता और बच्चे के बीच एक किनारे जोड़ता है।

  • vec[parent].push_back(child) और vec[child].push_back(parent) का उपयोग करके बढ़त जोड़ें।

  • फंक्शन रिकर्ड (int temp, वेक्टर vec[], vector &check) वर्टेक्स टेम्परेचर से ग्राफ पर DFS लागू करता है।

  • ऐरे चेक [अस्थायी] का उपयोग सही/गलत का उपयोग करके नोड्स को विज़िट/अनविजिट के रूप में सेट करने के लिए किया जाता है।

  • ट्रैवर्स वेक्टर vec[] लूप के लिए उपयोग कर रहा है और यदि check[vec[temp][i]] गलत है तो कॉलरेक्रर्ड (vec[temp][i], vec, check) कनेक्टेड नोड्स के लिए पुनरावर्ती रूप से करें।

  • फ़ंक्शन Trees_Forest(vector vec[], int vertice) vec[] लेता है और vec[] में आसन्न सूची के रूप में दिए गए जंगल में पेड़ों की गिनती देता है।

  • वनों की प्रारंभिक गणना 0 के रूप में लें।

  • ग्राफ़ के शीर्षों को विज़िट किए गए के रूप में चिह्नित करने के लिए वेक्टर<बूल> चेक(वर्टिस, असत्य) लें।

  • लूप के लिए उपयोग करके सभी शीर्षों को ट्रैवर्स करें।

  • अगर चेक [i] गलत है तो रिकर्ड (i, vec, check) और इंक्रीमेंटकाउंट का उपयोग करके dfs लागू करें।

  • सभी लूपों के अंत में परिणाम के रूप में वापसी की गणना करें।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
void insert(vector<int> vec[], int parent, int child){
   vec[parent].push_back(child);
   vec[child].push_back(parent);
}
void recurred(int temp, vector<int> vec[], vector<bool> &check){
   check[temp] = true;
   int size = vec[temp].size();
   for(int i = 0; i < size; i++){
      if (check[vec[temp][i]] == false){
         recurred(vec[temp][i], vec, check);
      }
   }
}
int Trees_Forest(vector<int> vec[], int vertice){
   int count = 0;
   vector<bool> check(vertice, false);
   for(int i = 0; i < vertice; i++){
      if(check[i] == false){
         recurred(i, vec, check);
         count++;
      }
   }
   return count;
}
int main(){
   int vertice = 9;
   vector<int> vec[vertice];
   insert(vec, 1, 3);
   insert(vec, 2, 8);
   insert(vec, 2, 6);
   insert(vec, 3, 5);
   insert(vec, 3, 7);
   insert(vec, 4, 8);
   cout<<"Count of number of trees in a forest are: "<<Trees_Forest(vec, vertice);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of number of trees in a forest are: 3

  1. C++ में समतल में समांतर चतुर्भुजों की संख्या

    हमें एक समतल दिया गया है जिसमें समांतर चतुर्भुज बनाने वाले बिंदु हैं और कार्य समांतर चतुर्भुजों की गणना करना है जो दिए गए बिंदुओं का उपयोग करके बनाए जा सकते हैं। समांतर चतुर्भुज में एक चतुर्भुज के विपरीत पक्ष समानांतर होते हैं और इसलिए विपरीत कोण बराबर होते हैं। इनपुट - int a[] = {0, 2, 5, 5, 2, 5,

  1. C++ में अंकगणित संख्या

    अंकगणितीय संख्या एक ऐसी संख्या है जिसमें सभी धनात्मक भाजक का औसत एक पूर्णांक होता है अर्थात संख्या n के लिए यदि भाजक की संख्या भाजक के योग को विभाजित कर सकती है तो n एक अंकगणितीय संख्या है। आइए अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं, Input : n = 6 Output : YES Explanation : Divisor

  1. C++ में CHAR_BIT

    CHAR_BIT चार में बिट्स की संख्या है। इसे C++ भाषा में “limits.h” हेडर फाइल में घोषित किया गया है। यह 8-बिट प्रति बाइट का होता है। यहाँ C++ भाषा में CHAR_BIT का एक उदाहरण दिया गया है, उदाहरण #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a