Graph g ← 生成图
depthFirstSearch():
for v ← 0 to g.N - 1:
color[v] ← WHITE
for v ← 0 to g.N - 1:
if color[v] = WHITE:
dfs(v)
dfs(u):
color[u] ← GRAY
for v in g.adjLists[u]:
if color[v] = WHITE:
dfs(v)
else if color[v] = GRAY:
边 (u, v) 是回溯边 # 检测出回溯边
color[u] ← BLACK