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