mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-02-07 20:46:16 +08:00
46
Graph/Topological-Sort.cpp
Normal file
46
Graph/Topological-Sort.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user