1. 程式人生 > >強連通分量 Tarjan演算法

強連通分量 Tarjan演算法

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)
}