Merge pull request #171 from AbhiY98/master

Added Topological Sorting
This commit is contained in:
Ashwek Swamy
2019-02-20 15:35:54 +05:30
committed by GitHub

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