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

सी ++ प्रोग्राम एक निर्देशित एसाइक्लिक ग्राफ की टोपोलॉजिकल सॉर्टिंग करने के लिए डीएफएस लागू करने के लिए

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

कार्य और छद्म कोड

Begin
   function topologicalSort():
   a) Mark the current node as visited.
   b) Recur for all the vertices adjacent to this vertex.
   c) Push current vertex to stack which stores result.
End
Begin
   function topoSort() which uses recursive topological sort() function:
   a) Mark all the vertices which are not visited.
   b) Call the function topologicalSort().
   c) Print the content.
End

उदाहरण

#include<iostream>
#include <list>
#include <stack>
using namespace std;
class G {
   int n;
   list<int> *adj;
   //declaration of functions
   void topologicalSort(int v, bool visited[], stack<int> &Stack);
   public:
   G(int n); //constructor
   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) // add the edges to the graph. {
   adj[v].push_back(w); //add w to v’s list
}
void G::topologicalSort(int v, bool visited[], stack<int> &Stack) {
   visited[v] = true; //mark current node as visited
   list<int>::iterator i;
   //Recur for all the vertices adjacent to this vertex.
   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];
   //Mark all the vertices which are not visited.
   for (int i = 0; i < n; i++)
      visited[i] = false;
      for (int i = 0; i < n; i++)
         if (visited[i] == false)
            //Call the function topologicalSort().
            topologicalSort(i, visited, Stack);
         while (Stack.empty() == false) {
            cout << Stack.top() << " "; //print the element
            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. सी++ प्रोग्राम डीएफएस का उपयोग कर अप्रत्यक्ष ग्राफ की कनेक्टिविटी की जांच करने के लिए

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

  1. C++ प्रोग्राम BFS का उपयोग करके निर्देशित ग्राफ़ की कनेक्टिविटी की जाँच करने के लिए

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

  1. सी++ प्रोग्राम डीएफएस का उपयोग करके निर्देशित ग्राफ की कनेक्टिविटी की जांच करने के लिए

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