Topological Ordering

Pseudocode for finding a Topological Ordering of a DAG

TOPO(G){
    Q // queue of nodes with no incoming edge
    L // topological ordering

    //Initialization
    for each(v in V){
        I[v] = number of incoming edges
        if(I[v] == 0){
            add v to Q
        }
    }

    while(Q is not empty){
        v = Q.pop
        add v to L
        for each(u in AdjList(v)){
             I[u]--
             if(I[u] == 0){
                add u to Q
            }
        }
    }
    return L
}