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

C++ प्रोग्राम: DFS का उपयोग करके डायरेक्टेड एसाइक्लिक ग्राफ का टोपोलॉजिकल सॉर्टिंग


DAG (डायरेक्टेड एसाइक्लिक ग्राफ) का टोपोलॉजिकल सॉर्टिंग वर्टेक्स का एक रैखिक क्रम है जिसमें प्रत्येक डायरेक्टेड एज uv के लिए, वर्टेक्स u क्रम में v से पहले आता है। यदि ग्राफ DAG नहीं है, तो ग्राफ के लिए टोपोलॉजिकल सॉर्टिंग संभव नहीं है।

फंक्शन और स्यूडोकोड

Begin    function topologicalSort():    a) वर्तमान नोड को विज़िटेड मार्क करें।    b) इस वर्टेक्स से सटे सभी वर्टेक्स के लिए पुनरावृत्ति करें।    c) वर्तमान वर्टेक्स को स्टैक में पुश करें जो परिणाम संग्रहीत करता है। End 
Begin    function topoSort() जो रिकर्सिव topologicalSort() फंक्शन का उपयोग करता है:    a) उन सभी वर्टेक्स को मार्क करें जो विज़िटेड नहीं हैं।    b) topologicalSort() फंक्शन को कॉल करें।    c) सामग्री प्रिंट करें। End

उदाहरण

#include<iostream> #include <list> #include <stack> using namespace std; class G {    int n;    list<int> *adj;    // फंक्शन की घोषणा    void topologicalSort(int v, bool visited[], stack<int> &Stack);    public:    G(int n); // कंस्ट्रक्टर    void addEd(int v, int w);    void topoSort(); }; G::G(int n) {    this->n = n;    adj = new list<int> [n]; } void G::addEd(int v, int w) // ग्राफ में एज जोड़ें। {    adj[v].push_back(w); // w को v की सूची में जोड़ें } void G::topologicalSort(int v, bool visited[], stack<int> &Stack) {    visited[v] = true; // वर्तमान नोड को विज़िटेड मार्क करें    list<int>::iterator i;    // इस वर्टेक्स से सटे सभी वर्टेक्स के लिए पुनरावृत्ति करें।    for (i = adj[v].begin(); i != adj[v].end(); ++i)       if (!visited[*i])          topologicalSort(*i, visited, Stack);          Stack.push(v); } void G::topoSort() {    stack<int> Stack;    bool *visited = new bool[n];    // उन सभी वर्टेक्स को मार्क करें जो विज़िटेड नहीं हैं।    for (int i = 0; i < n; i++)       visited[i] = false;       for (int i = 0; i < n; i++)          if (visited[i] == false)             // topologicalSort() फंक्शन को कॉल करें।             topologicalSort(i, visited, Stack);          while (Stack.empty() == false) {             cout << Stack.top() << " "; // एलिमेंट प्रिंट करें             Stack.pop();          } } int main() {    G g(6);    g.addEd(4, 2);    g.addEd(5, 1);    g.addEd(4, 0);    g.addEd(3, 1);    g.addEd(1, 3);    g.addEd(3, 2);    cout << " Topological Sort of the given graph \n";    g.topoSort();    return 0; }

आउटपुट

Topological Sort of the given graph 5 4 1 3 2 0
  1. C++ प्रोग्राम: DFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना C++ प्रोग्राम: DFS का उपयोग करके अनडायरेक्टेड ग्राफ की कनेक्टिविटी जांचना

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

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

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

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

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