Directed Graphs. Types of Edges. Forward, back, cross and tree edges. DAGs. Odd to mention them now, but they will come up later and now’s as good a place as any. They have unique search characteristics. acyclic == linearizability == no back edges. Strongly Connected Components.
Forward, back, cross and tree edges.
acyclic == linearizability == no back edges.
Set of vertices such that each vertex is reachable from every other vertex—including itself.
Directed analogue of a biconnected component.
Input: Graph G = (V, E)
index = 0 // DFS node number counter
S = empty // An empty stack of nodes
forall v in V do
if (v.index is undefined) // Start a DFS at each node
tarjan(v) // we haven't visited yet
v.index = index // Set the depth index for v
v.lowlink = index
index = index + 1
S.push(v) // Push v on the stack
forall (v, v') in E do // Consider successors of v
if (v'.index is undefined) // Was successor v' visited?
tarjan(v') // Recurse
v.lowlink = min(v.lowlink, v'.lowlink)
else if (v' is in S) // Was successor v' in stack S?
v.lowlink = min(v.lowlink, v'.index)
if (v.lowlink == v.index) // Is v the root of an SCC?
v' = S.pop
until (v' == v)