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