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 Stack) // 如果節點v還在棧内(很重要,無向圖沒有這一步)
Low[u] = min(Low[u], Dfn[v])
if (Dfn[u] == Low[u]) // 如果節點u是強連通分量的根
repeat
v = Stack.pop // 将v退棧,為該強連通分量中一個頂點
mark v // 标記v,同樣通過棧來找連通分量
until (u == v)
}