Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <list>
- using namespace std;
- class DirectedGraph
- {
- int V;
- list<int> *adj;
- bool isCyclicUtil(int v, bool visited[], bool *rs);
- public:
- DirectedGraph(){
- V = 0;
- adj = NULL;
- }
- DirectedGraph(int V)
- {
- this->V = V;
- adj = new list<int>[V];
- }
- void addEdge(int v, int w)
- {
- adj[v].push_back(w);
- }
- bool 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 (isCyclicUtil(i, visited, recStack))
- return true;
- return false;
- }
- };
- bool DirectedGraph::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;
- }
Add Comment
Please, Sign In to add comment