声明:博主有点强迫症喜欢把英文单词的首字母大写,所以见谅......
这是另一位强迫癌症的大佬
首先先推荐几个关于Tarjan的博客:https://blog.csdn.net/qq_34374664/article/details/77488976
https://www.cnblogs.com/stxy-ferryman/p/7779347.html
https://www.cnblogs.com/c1299401227/p/5402747.html
每日必安利~~~~~~~~
进入正题
嗯,看了一个早上的Tarjan,发现我还是太菜了,再过8天就AFO了
先来个伪代码
tarjan(u) {
DFN[u]=Low[u]=++Index // 为节点u设定次序编号和Low初值
Stack.push(u) // 将节点u压入栈中
for each (u, v) in E // 枚举每一条边
if (v is not visted) // 如果节点v未被访问过
tarjan(v) // 继续向下找
Low[u] = min(Low[u], Low[v])
else if (v in S) // 如果节点v还在栈内
Low[u] = min(Low[u], DFN[v])
if (DFN[u] == Low[u]) // 如果节点u是强连通分量的根
repeat
v = S.pop // 将v退栈,为该强连通分量中一个顶点
print v
until (u== v)
}
未完待续......