From d06e2258b87c35a8a500cbee29024750b32c6579 Mon Sep 17 00:00:00 2001 From: lonewolf Date: Thu, 15 Oct 2020 18:08:04 +0530 Subject: [PATCH 1/2] topological sort algo added --- Graphs/TopologicalSort.cpp | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Graphs/TopologicalSort.cpp diff --git a/Graphs/TopologicalSort.cpp b/Graphs/TopologicalSort.cpp new file mode 100644 index 0000000..a15ad23 --- /dev/null +++ b/Graphs/TopologicalSort.cpp @@ -0,0 +1,73 @@ + +#include +using namespace std; + +void init(){ + #ifndef ONLINE_JUDGE + freopen("input.txt", "r", stdin) ; + freopen("output.txt", "w", stdout) ; + #endif +} + +bool dfs(int v, vector>& graph, vector& visited, vector& recStack, stack& topologicalOrder){ + visited[v]=true; + recStack[v]=true; + for(int child: graph[v]){ + if(recStack[child]) + return false; + if(visited[child]==false){ + if(dfs(child,graph,visited,recStack,topologicalOrder)==false) + return false; + } + } + topologicalOrder.push(v); + recStack[v]=false; + return true; +} +vector findTopologicalOrder(int numCourses, vector>& graph) { + + // traverse the graph and find topological sort + stack topologicalOrder; + vector visited(numCourses);// for visited node + vector recStack(numCourses);// for rec stack to check if there is back-edge + for(int i=0;i ans; + for(int i=0;i>n>>m; + //create graph + vector> graph(n); + for(int i=0;i>a>>b; + graph[a].push_back(b); + } + vector ans=findTopologicalOrder(n,graph); + cout<<"The topological sort is as follows\n"; + for(int i:ans) + cout< Date: Thu, 15 Oct 2020 18:10:49 +0530 Subject: [PATCH 2/2] add algo name and complexity in file --- Graphs/TopologicalSort.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Graphs/TopologicalSort.cpp b/Graphs/TopologicalSort.cpp index a15ad23..a0b8688 100644 --- a/Graphs/TopologicalSort.cpp +++ b/Graphs/TopologicalSort.cpp @@ -1,3 +1,5 @@ +// Topological Sort +// O (V+E) #include using namespace std;