伪代码
1.
BFS(x)
s=new queue
s.push(x)
while !s.empty()
u=s.front
s.pop
u.visit=true
for v has edge(u,v)
if !v.visit // !!!only put not-visit node into queue
s.push(v)
2.
DFS(G) //there might be many parts that have no mutual connection
for each u in G
if !u.visit
DFS-visit(G,u)
3.
DFS-visit(G,u)
for v has edge(u,v)
if !v.visit
DFS-visit(v)
u.visit=true
3.//using a set
topological-sort(G)
s->set of all node with no incoming edges
l->a list for sorted node
while !s.empty()
u=s.front
s.pop // remember to remove u from s once it is read
for edge(u,v)
remove edge(u,v)
if v has no incoming edge
s.push(v)
insert u to the end of l
//check whether the graph has cycle
if graph has edges
return error"has at least one cycle"
else return l
4.//using dfs
topological-sort(G)
l->a list that contains sorted node (the result is a reversion of the reality)
// u don't need to be very special. Even if u has incoming edges, visiting it
// ahead of visiting its father will also guarantee it appears later than its father
// in l
for each u in s
if !u.visit
dfs(u)
#put v into the front of l when v.visit is set to be true