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

सी ++ प्रोग्राम यह जांचने के लिए कि क्या एक अप्रत्यक्ष ग्राफ एक पेड़ है या डीएफएस का उपयोग नहीं कर रहा है

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

एल्गोरिदम

Begin
function cyclicUtil() :
   A) Mark the current node as visited.
   B) Recur for all the vertices adjacent to this vertex.
   C) If an adjacent is not visited, then recur for that adjacent.
   D) If an adjacent is visited and not parent of current vertex, then there is a cycle.
End
Begin
function cyclic():
   A) Mark all the vertices as not visited and not part of recursion stack.
   B) Call the recursive function cyclicUtil() to detect cycle in differentDFS trees.
End

उदाहरण

#include<iostream>
#include <list>
#include <limits.h>
using namespace std;
class G {
   int n;
   list<int> *adj;
   bool CyclicUtil(int v, bool visited[], int par);
   public:
      G(int n); //constructor
      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)//to add edges in the graph {
   adj[v].push_back(u); //add u to v’s list
   adj[u].push_back(v);//add v to u’s list
}
//recusive function uses visited[] to detect cycle in subgraph reachable from vertex v:
bool G::CyclicUtil(int v, bool visited[], int par) {
   visited[v] = true; // Mark the current node as visited
   // Recur for all the vertices adjacent to this vertex
   list<int>::iterator i;
   for (i = adj[v].begin(); i != adj[v].end(); ++i) {
      if (!visited[*i]) //If an adjacent is not visited, then recur for that adjacent {
         if (CyclicUtil(*i, visited, v))
            return true;
      }
      // If an adjacent is visited and not parent of current vertex, then there is a cycle.
         else if (*i != par)
            return true;
   }
   return false;
}
// to check if the graph is tree or not.
bool G ::cyclic() {
   bool *visited = new bool[n]; // Mark all the vertices as not visited and not part of recursion stack
   for (int i = 0; i < n; i++)
      visited[i] = false;
      // Call the recursive function CyclicUtil() to detect cycle in different DFS trees
      for (int u = 0; u < n; u++)
         if (!visited[u])
            if (CyclicUtil(u, visited, -1))
               return true;
               return false;
}
int main() {
   G g1(4);
   g1.addEd(0, 1);
   g1.addEd(1, 2);
   g1.cyclic() ? cout << "Undirected Graph isn't a tree\n" : cout
   << "Undirected Graph is a tree\n";
   return 0;
}

आउटपुट

Undirected Graph is a tree

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

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

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

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

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

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