尝试按照伪代码的步骤和你的示例一步步跟踪,你就能理解这个算法了,它非常容易,只是纯粹的DFS:
Initialize clock to 1
PreVisit(v):
pre[v] <- clock
clock <- clock + 1
PostVisit(v):
post[v] <- clock
clock <- clock + 1
Explore(v):
visited[v] = true
PreVisit(v)
for all u adj to v:
if u is not visited:
Explore(u)
PostVisit(v)
pre
、post
和visited
数组。对于visited
数组,您需要在调用Explore(v)
之前将其填充为false
。