(Latest Revision: Tue Oct 31 22:28:41 PST 2000 ) graphDpthSrch

graphDpthSrch




ALGORITHM FOR A DEPTH-FIRST TRAVERSAL

PROCEDURE VisitComponentOf (startNode : node) ;
BEGIN
  change the status of startNode to "ready" ;
  push startNode onto the ready stack ;
  WHILE  the ready stack is not empty DO
  BEGIN
    Pop a node X from the ready stack ;
    process(X) ;
    FOR each neighbor Y of X DO
    BEGIN
      IF    the status of Y is "waiting"
      THEN  BEGIN
              change the status of Y to "ready" ;
              Push Y onto the ready stack
            END 
      ELSE  IF    Y is in the ready stack
            THEN  move Y to the top of the ready stack 
    END 
  END 
END ;
(* Above, we could avoid the work of removing duplicate copies from the "stack" by marking a node "closed" after processing, and checking each node popped from the stack to see if it is "closed" before processing. If it is marked "closed", the algorithm would not process it, because having that mark means it was processed earlier at a greater or equal depth. The cost of this would be that we could have up to O(N^2) objects on the stack, where N is the number of nodes in the graph. *)


PROCEDURE DepthFirstTraversal (G : graph) ;
BEGIN
  Set the status of each node of G to "waiting" ;
  FOR each node N of G DO
    IF    the status of N is waiting
    THEN  VisitComponentOf(N)
END ;