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

जांचें कि क्या ग्राफ दृढ़ता से जुड़ा हुआ है - सी ++ में सेट 1 (डीएफएस का उपयोग कर कोसराजू)

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

कुछ अप्रत्यक्ष ग्राफ जुड़े हो सकते हैं लेकिन दृढ़ता से जुड़े नहीं। यह दृढ़ता से जुड़े ग्राफ़ का एक उदाहरण है।

जांचें कि क्या ग्राफ दृढ़ता से जुड़ा हुआ है - सी ++ में सेट 1 (डीएफएस का उपयोग कर कोसराजू)

यह कनेक्टेड का एक उदाहरण है, लेकिन दृढ़ता से कनेक्टेड ग्राफ़ नहीं है।

जांचें कि क्या ग्राफ दृढ़ता से जुड़ा हुआ है - सी ++ में सेट 1 (डीएफएस का उपयोग कर कोसराजू)

यहां हम देखेंगे कि कोसाराजू एल्गोरिथम के निम्नलिखित चरणों का उपयोग करके ग्राफ़ की जांच कैसे करें कि यह दृढ़ता से जुड़ा हुआ है या नहीं।

कदम -

  • सभी नोड्स को नहीं देखा के रूप में चिह्नित करें

  • किसी मनमाना शीर्ष u से DFS ट्रैवर्सल प्रारंभ करें। यदि डीएफएस सभी नोड्स पर जाने में विफल रहता है, तो झूठी वापसी करें।

  • ग्राफ़ के सभी किनारों को उलट दें

  • सभी शीर्षों को फिर से न देखे गए नोड्स के रूप में सेट करें

  • उस शीर्ष u से DFS ट्रैवर्सल प्रारंभ करें। यदि डीएफएस सभी नोड्स पर जाने में विफल रहता है, तो झूठी वापसी करें। अन्यथा सत्य।

उदाहरण

#include <iostream>
#include <list>
#include <stack>
using namespace std;
class Graph {
   int V;
   list<int> *adj;
   void dfs(int v, bool visited[]);
   public:
   Graph(int V) {
      this->V = V;
      adj = new list<int>[V];
   }
   ~Graph() {
      delete [] adj;
   }
   void addEdge(int v, int w);
   bool isStronglyConnected();
   Graph reverseArc();
};
void Graph::dfs(int v, bool visited[]) {
   visited[v] = true;
   list<int>::iterator i;
   for (i = adj[v].begin(); i != adj[v].end(); ++i)
   if (!visited[*i])
      dfs(*i, visited);
}
Graph Graph::reverseArc() {
   Graph graph(V);
   for (int v = 0; v < V; v++) {
      list<int>::iterator i;
      for(i = adj[v].begin(); i != adj[v].end(); ++i)
      graph.adj[*i].push_back(v);
   }
   return graph;
}
void Graph::addEdge(int u, int v) {
   adj[u].push_back(v);
}
bool Graph::isStronglyConnected() {
   bool visited[V];
   for (int i = 0; i < V; i++)
   visited[i] = false;
   dfs(0, visited);
   for (int i = 0; i < V; i++)
   if (visited[i] == false)
      return false;
   Graph graph = reverseArc();
   for(int i = 0; i < V; i++)
   visited[i] = false;
   graph.dfs(0, visited);
   for (int i = 0; i < V; i++)
   if (visited[i] == false)
      return false;
   return true;
}
int main() {
   Graph graph(5);
   graph.addEdge(0, 1);
   graph.addEdge(1, 2);
   graph.addEdge(2, 3);
   graph.addEdge(3, 0);
   graph.addEdge(2, 4);
   graph.addEdge(4, 2);
   graph.isStronglyConnected()? cout << "This is strongly connected" : cout << "This is not strongly connected";
}

आउटपुट

This is strongly connected

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

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

  1. C++ प्रोग्राम यह जांचने के लिए कि कोई ग्राफ़ मजबूती से जुड़ा है या नहीं

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

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

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