diff --git a/Topological Graph Sort b/Topological Graph Sort new file mode 100644 index 0000000..b1dc23d --- /dev/null +++ b/Topological Graph Sort @@ -0,0 +1,143 @@ + +// A C++ program to print topological sorting of a DAG + +#include + +#include + +#include + +using namespace std; +class Graph +{ + int V; // No. of vertices' + list *adj; + void topologicalSortUtil(int v, bool visited[], stack &Stack); +public: + + Graph(int V); // Constructor + + void addEdge(int v, int w); + + void topologicalSort(); + +}; + + + +Graph::Graph(int V) + +{ + + this->V = V; + + adj = new list[V]; + +} + + + +void Graph::addEdge(int v, int w) + +{ + + adj[v].push_back(w); // Add w to v’s list. + +} + + +void Graph::topologicalSortUtil(int v, bool visited[], + + stack &Stack) + +{ + + + visited[v] = true; + list::iterator i; + + for (i = adj[v].begin(); i != adj[v].end(); ++i) + + if (!visited[*i]) + + topologicalSortUtil(*i, visited, Stack); + + + Stack.push(v); + +} + + + + +// topologicalSortUtil() + +void Graph::topologicalSort() + +{ + + stack Stack; + + + + + bool *visited = new bool[V]; + + for (int i = 0; i < V; i++) + + visited[i] = false; + + + for (int i = 0; i < V; i++) + + if (visited[i] == false) + + topologicalSortUtil(i, visited, Stack); + + + while (Stack.empty() == false) + + { + + cout << Stack.top() << " "; + + Stack.pop(); + + } + +} + + +int main() + +{ + + // 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(); + + + + return 0; + +} + +