Graph Traversal

Depth-First search
id=0
for k=1 to v do val[k]:=0;
for k=1 to v do
    if val[k]=0 then visit(k);

visit(k)
    val[k]:=++id;
for each son t of k do
if val[t]=0  then visit(t);
 
                             tk
*Has Cycle  val[t]0 in visit (--- line ) ( --- to ancestor only)
*connected component Non-recurive visit

Non-recursive DFS(stack)                                Breadth-First Search(Queue)
    visit(k);                                                                      visit(k)
        push(k);                                                                       put(k);
        repeat
           k:=pop;                                                                    k:=get;
           val[k]:=++id;
            for each son t of  k do
                if val[t]=0 then
                    push(t);
                    val[t]:=-1                                                         put(t);
    until stack=0