Topological Sort
Linear ordering of vertices in a DAG such that for every edge u->v, u appears before v. Returns None if graph has a cycle.
DFS-Based — O(V + E)
from collections import defaultdict, deque
class DirectedGraph:
def __init__(self):
self.adj = defaultdict(list)
self.vertices = set()
def add_edge(self, u, v):
self.adj[u].append(v)
self.vertices.add(u)
self.vertices.add(v)
def topological_sort_dfs(graph):
"""Return
[Description truncada. Veja o README completo no GitHub.]