Topological Sort

1. Definition

Example


2. Requirements for Topological Sort

  1. Directed Edges: All edges must have a direction.
  2. Acyclic Graph: No cycles allowed (cycles make topological ordering impossible).
  3. Not Necessarily Connected: The graph can have multiple disconnected components.

Why Cycles Break Topological Sort


3. Algorithm: DFS Approach

Steps

  1. Post-Order DFS Traversal:
  2. Reverse the Result: The final topological order is the reverse of the post-order DFS result.

Pseudocode

def topological_sort(n, edges):
    # Build adjacency list
    adj = {i: [] for i in range(n)}
    for u, v in edges:
        adj[u].append(v)

    visited = set()
    result = []

    def dfs(node):
        if node in visited:
            return
        visited.add(node)
        for neighbor in adj[node]:
            dfs(neighbor)
        result.append(node)  # Post-order addition

    for node in range(n):
        if node not in visited:
            dfs(node)

    return result[::-1]  # Reverse to get topological order