|
|
|
Notice:
|
|
Every edge in the graph goes from a vertex with a smaller index to one with a larger index
|
|
|
i = 1; while ( G ≠ &empty ) { Let x = vertex in G with indeg(x) = 0; Label x with "i"; i++; Delete all edges (x, z) from G; } |
Stack S = contains vertices with indeg = 0 (these vertices are ready to be labeled) ============================================================== S = ∅ ; // Initialize the stack /* --------------------------------------- Compute the "indegree" for each vertex --------------------------------------- */ for ( each vertex x ∈ G ) { incounter[x] = incoming degree of x; } /* --------------------------------------- Find vertices with indeg = 0 --------------------------------------- */ for ( each vertex x ∈ G ) { if ( incounter[x] == 0 ) push(x); } i = 1; // Initial label /* --------------------------------------- Label the next vertex in S --------------------------------------- */ while ( S ≠ &empty ) { u = S.pop(); Label u with "i"; i++; /* ------------------------------------ Update indegree of affected nodes ------------------------------------ */ for ( each edge (u, z) ) do { incounter[z]--; if ( incounter[z] == 0 ) S.push(z); // z is ready to be numbered } } |
|
|
|
|
|
|
|