diff --git a/Graph/Topological-Sort.cpp b/Graph/Topological-Sort.cpp new file mode 100644 index 000000000..61a4fcd2e --- /dev/null +++ b/Graph/Topological-Sort.cpp @@ -0,0 +1,46 @@ +#include +#include +#include + using namespace std; + +int n , m; // For number of Vertices (V) and number of edges (E) +vector< vector > G; +vector visited; +vector ans; + +void dfs(int v) { + visited[v] = true; + for (int u : G[v]) { + if (!visited[u]) + dfs(u); + } + ans.push_back(v); +} + +void topological_sort() { + visited.assign(n, false); + ans.clear(); + for (int i = 0; i < n; ++i) { + if (!visited[i]) + dfs(i); + } + reverse(ans.begin(), ans.end()); +} +int main(){ + cout << "Enter the number of vertices and the number of directed edges\n"; + cin >> n >> m; + int x , y; + G.resize(n , vector()); + for(int i = 0 ; i < n ; ++i) { + cin >> x >> y; + x-- , y--; // to convert 1-indexed to 0-indexed + G[x].push_back(y); + } + topological_sort(); + cout << "Topological Order : \n"; + for(int v : ans) { + cout << v + 1 << ' '; // converting zero based indexing back to one based. + } + cout << '\n'; + return 0; +}