Topological Sort Python
from collections import defaultdict
class Graph:
    def __init__(self,n):
        self.graph = defaultdict(list)
        self.N = n
    def addEdge(self,m,n):
        self.graph[m].append(n)
    def sortUtil(self,n,visited,stack):
        visited[n] = True
        for element in self.graph[n]:
            if visited[element] == False:
                self.sortUtil(element,visited,stack)
        stack.insert(0,n)
    def topologicalSort(self):
        visited = [False]*self.N
        stack =[]
        for element in range(self.N):
            if visited[element] == False:
                self.sortUtil(element,visited,stack)
        print(stack)
graph = Graph(5)
graph.addEdge(0,1);
graph.addEdge(0,3);
graph.addEdge(1,2);
graph.addEdge(2,3);
graph.addEdge(2,4);
graph.addEdge(3,4);
print("The Topological Sort Of The Graph Is:  ")
graph.topologicalSort()
