#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; }