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

C++ प्रोग्राम: DFS का उपयोग करके जांचें कि डायरेक्टेड ग्राफ ट्री है या नहीं


एक ग्राफ ट्री होता है यदि उसमें कोई साइकिल नहीं होती। यह एक C++ प्रोग्राम है जो DFS का उपयोग करके जांचता है कि कोई डायरेक्टेड ग्राफ ट्री है या नहीं।

एल्गोरिदम

Begin function cyclicUtil() :    a) वर्तमान नोड को विज़िटेड और रिकर्सन स्टैक का हिस्सा मार्क करें    b) इस वर्टेक्स से सटे सभी वर्टेक्स के लिए पुनरावृत्ति करें।    c) वर्टेक्स को रिकर्सन स्टैक से हटाएं। function cyclic() :    a) सभी वर्टेक्स को नॉट विज़िटेड और रिकर्सन स्टैक का हिस्सा नहीं मार्क करें    b) अलग-अलग ट्री में साइकिल का पता लगाने के लिए CyclicUtill() फंक्शन को कॉल करें End

उदाहरण

#include<iostream> #include <list> #include <limits.h> using namespace std; class G {    int n;    list<int> *adj; // आसन्न सूची संग्रहीत करें।    bool CyclicUtil(int v, bool visited[], bool *rs);    public:       G(int V); // कंस्ट्रक्टर       void addEd(int v, int w);       bool cyclic(); }; G::G(int n) {    this->n = n;    adj = new list<int> [n]; } void G::addEd(int v, int u) // ग्राफ में एज जोड़ने के लिए {    adj[v].push_back(u); // u को v की सूची में जोड़ें } bool G::CyclicUtil(int v, bool visited[], bool *recurS) {    if (visited[v] == false) {       visited[v] = true; // वर्तमान नोड को विज़िटेड और रिकर्सन स्टैक का हिस्सा मार्क करें       recurS[v] = true;       // इस वर्टेक्स से सटे सभी वर्टेक्स के लिए पुनरावृत्ति करें।       list<int>::iterator i;       for (i = adj[v].begin(); i != adj[v].end(); ++i) {          if (!visited[*i] && CyclicUtil(*i, visited, recurS))             return true;          else if (recurS[*i])             return true;       }    }    recurS[v] = false; // वर्टेक्स को रिकर्सन स्टैक से हटाएं।    return false; } // जांचें कि ग्राफ ट्री है या नहीं bool G::cyclic() {    // सभी वर्टेक्स को नॉट विज़िटेड और रिकर्सन स्टैक का हिस्सा नहीं मार्क करें    bool *visited = new bool[n];    bool *recurS = new bool[n];    for (int i = 0; i < n; i++) {       visited[i] = false;       recurS[i] = false;    }    // अलग-अलग ट्री में साइकिल का पता लगाने के लिए CyclicUtill() फंक्शन को कॉल करें    for (int i = 0; i < n; i++)       if (CyclicUtil(i, visited, recurS))          return true;          return false; } int main() {    G g(4);    g.addEd(0, 2);    g.addEd(1, 2);    g.addEd(2, 0);    g.addEd(3, 2);    if (g.cyclic())       cout << "Directed Graph isn't a tree";    else       cout << "Directed Graph is a tree";       return 0; }

आउटपुट

Directed Graph isn't a tree
  1. C++ प्रोग्राम: BFS का उपयोग करके डायरेक्टेड ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: BFS का उपयोग करके डायरेक्टेड ग्राफ की कनेक्टिविटी जांचना

    ग्राफ की कनेक्टिविटी जांचने के लिए, हम किसी भी ट्रैवर्सल एल्गोरिदम का उपयोग करके सभी नोड्स को ट्रैवर्स करने का प्रयास करेंगे। ट्रैवर्सल पूरा होने के बाद, यदि कोई नोड है, जो विजिट नहीं हुआ है, तो ग्राफ कनेक्टेड नहीं है। डायरेक्टेड ग्राफ के लिए, हम कनेक्टिविटी जांचने के लिए सभी नोड्स से ट्रैवर्स करन

  1. C++ प्रोग्राम: जांचें कि क्या एक ग्राफ दृढ़ता से जुड़ा हुआ है या नहीं C++ प्रोग्राम: जांचें कि क्या एक ग्राफ दृढ़ता से जुड़ा हुआ है या नहीं

    निर्देशित ग्राफ में घटकों को दृढ़ता से जुड़ा हुआ कहा जाता है, जब एक घटक में वर्टेक्स के प्रत्येक जोड़े के बीच एक पथ होता है। इस एल्गोरिदम को हल करने के लिए, पहले, प्रत्येक वर्टेक्स का फिनिश टाइम प्राप्त करने के लिए DFS एल्गोरिदम का उपयोग किया जाता है, अब ट्रांसपोज़्ड ग्राफ का फिनिश टाइम ढूंढें, फि

  1. C++ प्रोग्राम: DFS का उपयोग करके निर्देशित ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: DFS का उपयोग करके निर्देशित ग्राफ की कनेक्टिविटी जांचना

    ग्राफ की कनेक्टिविटी जांचने के लिए, हम किसी भी ट्रैवर्सल एल्गोरिदम का उपयोग करके सभी नोड्स को पार करने का प्रयास करेंगे। ट्रैवर्सल पूरा होने के बाद, यदि कोई नोड है, जिसे विज़िट नहीं किया गया है, तो ग्राफ जुड़ा हुआ नहीं है। निर्देशित ग्राफ के लिए, हम कनेक्टिविटी जांचने के लिए सभी नोड्स से ट्रैवर्स