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