void Graph::addEdge(int v, int w) { adj[v].push_back(w); // Add w to v’s list. }
// A recursive function used by topologicalSort void Graph::topologicalSortUtil(int v, bool visited[], stack<int> &Stack) { // Mark the current node as visited. visited[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]) topologicalSortUtil(*i, visited, Stack);
// Push current vertex to stack which stores result Stack.push(v); }
// The function to do Topological Sort. It uses recursive // topologicalSortUtil() void Graph::topologicalSort() { stack<int> Stack;
// Mark all the vertices as not visited bool *visited = newbool[V]; for (int i = 0; i < V; i++) visited[i] = false;
// Call the recursive helper function to store Topological // Sort starting from all vertices one by one for (int i = 0; i < V; i++) if (visited[i] == false) topologicalSortUtil(i, visited, Stack);
// Print contents of stack while (Stack.empty() == false) { cout << Stack.top() << " "; Stack.pop(); } }
intmain() { // Create a graph given in the above diagram Graph g(6); g.addEdge(5, 2); g.addEdge(5, 0); g.addEdge(4, 0); g.addEdge(4, 1); g.addEdge(2, 3); g.addEdge(3, 1);
cout << "Following is a Topological Sort of the given graph n"; g.topologicalSort();
// This class represents a directed graph using adjacency // list representation classGraph { privateint V; // No. of vertices private LinkedList<Integer> adj[]; // Adjacency List
//Constructor Graph(int v) { V = v; adj = new LinkedList[v]; for (int i=0; i<v; ++i) adj[i] = new LinkedList(); }
// Function to add an edge into the graph voidaddEdge(int v,int w){ adj[v].add(w); }
// A recursive function used by topologicalSort voidtopologicalSortUtil(int v, boolean visited[], Stack stack) { // Mark the current node as visited. visited[v] = true; Integer i;
// Recur for all the vertices adjacent to this // vertex Iterator<Integer> it = adj[v].iterator(); while (it.hasNext()) { i = it.next(); if (!visited[i]) topologicalSortUtil(i, visited, stack); }
// Push current vertex to stack which stores result stack.push(new Integer(v)); }
// The function to do Topological Sort. It uses // recursive topologicalSortUtil() voidtopologicalSort() { Stack stack = new Stack();
// Mark all the vertices as not visited boolean visited[] = newboolean[V]; for (int i = 0; i < V; i++) visited[i] = false;
// Call the recursive helper function to store // Topological Sort starting from all vertices // one by one for (int i = 0; i < V; i++) if (visited[i] == false) topologicalSortUtil(i, visited, stack);
// Print contents of stack while (stack.empty()==false) System.out.print(stack.pop() + " "); }
publicstaticvoidmain(String args[]) { // Create a graph given in the above diagram Graph g = new Graph(6); g.addEdge(5, 2); g.addEdge(5, 0); g.addEdge(4, 0); g.addEdge(4, 1); g.addEdge(2, 3); g.addEdge(3, 1);
System.out.println("Following is a Topological " + "sort of the given graph"); g.topologicalSort(); } }