Topological sorting is a linear ordering of vertices in a directed acyclic graph (DAG) such that for every directed edge UV from vertex U to vertex V, U comes before V in the ordering. To implement topological sorting in C++, we can use depth-first search (DFS) and maintain a visited status for each vertex to detect cycles.
Topological Sort, Cycle Detection, C++, Directed Graph, Depth-First Search, Algorithm
This code demonstrates how to implement topological sorting and cycle detection in a directed graph using C++.
        #include 
        #include 
        #include 
        #include 
        using namespace std;
        class Graph {
        private:
            int V;
            list *adj;
            bool isCyclicUtil(int v, vector& visited, vector& recStack) {
                visited[v] = true;
                recStack[v] = true;
                
                for (auto i : adj[v]) {
                    if (!visited[i] && isCyclicUtil(i, visited, recStack))
                        return true;
                    else if (recStack[i])
                        return true;
                }
                recStack[v] = false;
                return false;
            }
        public:
            Graph(int V) {
                this->V = V;
                adj = new list[V];
            }
            void addEdge(int v, int w) {
                adj[v].push_back(w);
            }
            bool isCyclic() {
                vector visited(V, false);
                vector recStack(V, false);
                for (int i = 0; i < V; i++) {
                    if (!visited[i]) {
                        if (isCyclicUtil(i, visited, recStack))
                            return true;
                    }
                }
                return false;
            }
            void topologicalSortUtil(int v, vector& visited, stack& Stack) {
                visited[v] = true;
                for (auto i : adj[v]) {
                    if (!visited[i])
                        topologicalSortUtil(i, visited, Stack);
                }
                Stack.push(v);
            }
            void topologicalSort() {
                stack Stack;
                vector visited(V, false);
                
                for (int i = 0; i < V; i++) {
                    if (!visited[i])
                        topologicalSortUtil(i, visited, Stack);
                }
                while (!Stack.empty()) {
                    cout << Stack.top() << " ";
                    Stack.pop();
                }
            }
        };
        int main() {
            Graph g(6);
            g.addEdge(5, 2);
            g.addEdge(5, 0);
            g.addEdge(4, 0);
            g.addEdge(4, 1);
            g.addEdge(3, 1);
            g.addEdge(2, 3);
            
            if (g.isCyclic())
                cout << "Graph has a cycle" << endl;
            else {
                cout << "Topological Sort: ";
                g.topologicalSort();
            }
            return 0;
        }
              
   
				
	
													How do I avoid rehashing overhead with std::set in multithreaded code?
														
													How do I find elements with custom comparators with std::set for embedded targets?
														
													How do I erase elements while iterating with std::set for embedded targets?
														
													How do I provide stable iteration order with std::unordered_map for large datasets?
														
													How do I reserve capacity ahead of time with std::unordered_map for large datasets?
														
													How do I erase elements while iterating with std::unordered_map in multithreaded code?
														
													How do I provide stable iteration order with std::map for embedded targets?
														
													How do I provide stable iteration order with std::map in multithreaded code?
														
													How do I avoid rehashing overhead with std::map in performance-sensitive code?
														
													How do I merge two containers efficiently with std::map for embedded targets?