Search
 
SCRIPT & CODE EXAMPLE
 

CPP

c++ Detect Cycle in a Directed Graph

// A C++ Program to detect cycle in a graph
#include<bits/stdc++.h>
  
using namespace std;
  
class Graph
{
    int V;    // No. of vertices
    list<int> *adj;    // Pointer to an array containing adjacency lists
    bool isCyclicUtil(int v, bool visited[], bool *rs);  // used by isCyclic()
public:
    Graph(int V);   // Constructor
    void addEdge(int v, int w);   // to add an edge to graph
    bool isCyclic();    // returns true if there is a cycle in this graph
};
  
Graph::Graph(int V)
{
    this->V = V;
    adj = new list<int>[V];
}
  
void Graph::addEdge(int v, int w)
{
    adj[v].push_back(w); // Add w to v’s list.
}
  
// This function is a variation of DFSUtil() in 
// https://www.geeksforgeeks.org/archives/18212
bool Graph::isCyclicUtil(int v, bool visited[], bool *recStack)
{
    if(visited[v] == false)
    {
        // Mark the current node as visited and part of recursion stack
        visited[v] = true;
        recStack[v] = true;
  
        // 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] && isCyclicUtil(*i, visited, recStack) )
                return true;
            else if (recStack[*i])
                return true;
        }
  
    }
    recStack[v] = false;  // remove the vertex from recursion stack
    return false;
}
  
// Returns true if the graph contains a cycle, else false.
// This function is a variation of DFS() in 
// https://www.geeksforgeeks.org/archives/18212
bool Graph::isCyclic()
{
    // Mark all the vertices as not visited and not part of recursion
    // stack
    bool *visited = new bool[V];
    bool *recStack = new bool[V];
    for(int i = 0; i < V; i++)
    {
        visited[i] = false;
        recStack[i] = false;
    }
  
    // Call the recursive helper function to detect cycle in different
    // DFS trees
    for(int i = 0; i < V; i++)
        if ( !visited[i] && isCyclicUtil(i, visited, recStack))
            return true;
  
    return false;
}
  
int main()
{
    // Create a graph given in the above diagram
    Graph g(4);
    g.addEdge(0, 1);
    g.addEdge(0, 2);
    g.addEdge(1, 2);
    g.addEdge(2, 0);
    g.addEdge(2, 3);
    g.addEdge(3, 3);
  
    if(g.isCyclic())
        cout << "Graph contains cycle";
    else
        cout << "Graph doesn't contain cycle";
    return 0;
}
Comment

PREVIOUS NEXT
Code Example
Cpp :: left margin c++ 
Cpp :: C++ Creating a Class Template Object 
Cpp :: what is stdoutread in c++ 
Cpp :: Diamond pattren program in C++ 
Cpp :: crtdbg c++ 
Cpp :: add two constant char pointers c++ 
Cpp :: operator overloading prefix postfix c++ 
Cpp :: armstrong number 
Cpp :: Targon lol 
Cpp :: Write C++ program that will ask to choose from three cases. 
Cpp :: ranged based for loop c++ 
Cpp :: esp8266 wifi.localip() to string 
Cpp :: how to know how many numbers i deleted with erase command on multiset c++ 
Cpp :: declare static table filled cpp 
Cpp :: 130 divided by -10 
Cpp :: read large files part by part in C++ 
Cpp :: castin in C++ 
Cpp :: yearly interest calculator c++ using for loop 
Cpp :: librerias matematicas en c++ para numeros aleatorios 
Cpp :: windows install cppcheck 
Cpp :: convert c++ code to exe 
Cpp :: permutation and combination program in c++ 
Cpp :: how to srt vector array 
Cpp :: Call db.close() on Button_Click (QT/C++) 
Cpp :: powers of 2 in cpp 
Cpp :: c++ & operator 
Cpp :: modify value in map c++ 
Cpp :: how to make sound in c++ 
Cpp :: what does for do in c++ 
C :: find string in all files powershell 
ADD CONTENT
Topic
Content
Source link
Name
6+9 =