您可以使用 DFS 横向对所有图边进行分类:
DFS-Visit(u) ? with edge classification. G must be a directed graph
1. color[u] ? GRAY
2. time ? time + 1
3. d[u] ? time
4. for each vertex v adjacent to u
5. do if color[v] ? BLACK
6. then if d[u] < d[v]
7. then Classify (u, v) as a forward edge
8. else Classify (u, v) as a cross edge
9. if color[v] ? GRAY
10. then Classify (u, v) as a back edge
11. if color[v] ? WHITE
12. then ?[v] ? u
13. Classify (u, v) as a tree edge
14. DFS-Visit(v)
15. color[u] ? BLACK
16. time ? time + 1
17. f[u] ? time
Run Code Online (Sandbox Code Playgroud)
正如你在这里看到的。