DFS( G)
1. for each vertex u in V(G)
2. do color[u]=WHITE
3. pi[u]=NIL
4. time=0
5. for each vertex u in V(G)
6. do if color[u]=WHITE
7. then DFS-VISIT(u)
DFS-VISIT(u)
1. color[u]=GRAY
2. time++;
3. d[u]=time;
4. Stack S;
5. S.push(u);
6. while( !S.empty())
7. w=S.top();
8. bool bl=true; //用来判断w是否有白色的邻居
9. for each v in Adj[w]
10. if( color[v]==WHITE)
11. pi[v]=w;
12. color[v]=GRAY;
13. d[v]=++time;
14. S.push(v);
15. bl=false; //此时w有白色的neighborhood
16. if( bl) //w has no white neighborhood
17. then color[w]=BLACK; f[w]=++time;
18. S.pop(); //w出栈
19.
浙公网安备 33010602011771号