mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
54 lines
988 B
C++
54 lines
988 B
C++
#include <iostream>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
using namespace std;
|
|
|
|
int n, m; // For number of Vertices (V) and number of edges (E)
|
|
vector<vector<int>> G;
|
|
vector<bool> visited;
|
|
vector<int> 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<int>());
|
|
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;
|
|
}
|