From 6ed7a6f8d83d622e95825ad5d33359235d9b801d Mon Sep 17 00:00:00 2001 From: Dhruvi Agrawal <60813752+dhruviagrawal@users.noreply.github.com> Date: Sat, 2 Oct 2021 18:38:57 +0530 Subject: [PATCH] Topological Sort-BFS-graphs --- Algorithms/TopologicalSort.cpp | 79 ++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Algorithms/TopologicalSort.cpp diff --git a/Algorithms/TopologicalSort.cpp b/Algorithms/TopologicalSort.cpp new file mode 100644 index 0000000..88c34c4 --- /dev/null +++ b/Algorithms/TopologicalSort.cpp @@ -0,0 +1,79 @@ +#include +using namespace std; + +//Using BFS Algorithm +//Intuition- indegree zero nodes wont have any edges so they are placed before. +//indegree is being reduced as zero indegree nodes where taken beforehand. + +class Solution +{ + public: + //Function to return list containing vertices in Topological order. + //BFS Algo is used + vector topoSort(int V, vector adj[]) + { + queueq; + vectorindegree(V,0); + for(int i=0;itopo; + while(!q.empty()) + { + int node=q.front(); + q.pop(); + topo.push_back(node); + for(auto it:adj[node]) + { + indegree[it]--; + if(indegree[it]==0) + q.push(it); + } + } + return topo; + } +}; + +int check(int V, vector &res, vector adj[]) { + vector map(V, -1); + for (int i = 0; i < V; i++) { + map[res[i]] = i; + } + for (int i = 0; i < V; i++) { + for (int v : adj[i]) { + if (map[i] > map[v]) return 0; + } + } + return 1; +} + +int main() { + int T; + cin >> T; + while (T--) { + int N, E; + cin >> E >> N; + int u, v; + + vector adj[N]; + + for (int i = 0; i < E; i++) { + cin >> u >> v; + adj[u].push_back(v); + } + + Solution obj; + vector res = obj.topoSort(N, adj); + + cout << check(N, res, adj) << endl; + } + + return 0; +}