26. 강한 결합 요소(Strongly Connected Component)
**강한 결합 요소(Strongly Connected Component : SCC)**란 그래프 안에서 '강하게 결합된 정접 집합'을 의미한다. 같은 SCC에 속하는 두 정점은 서로 도달 가능하다.
따라서 사이클이 발생하는 경우 SCC에 해당된다. SCC는 Directed Graph일 때만 고려한다. 무향 그래프일떄는 그래프의 전체가 SCC이기 때문에 따로 고려하지 않는다.
SCC를 추출하는 알고리즘에는 대표적으로 2가지가 있다.
이 페이지에서는 타잔 알고리즘에 대해 다룬다.
타잔 알고리즘은 모든 정점에 대해 DFS를 수행하며 SCC를 찾는다.
DFS는 함수 안에서 계산된 최소 parent를 return한다.
아래는 DFS함수의 수행과정이다.
만약 현재노드가 최소 parent일경우 SCC가 있다는 뜻이다!
그 SCC를 구성하는 노드들은 Stack에 있다. Stack에서 현재노드가 나올 때 까지 노드를 하나씩 뽑는다. 뽑힌 노드들은 Finished로 지정해준다. 이 노드들은 이미 어떤 SCC로 묶였있다는 뜻이다. 따라서 나중에 DFS로 방문하지 않는다. 이로서 SCC가 하나 생성되었다!
만약 현재 노드가 최소노드가 아니라면 현재 노드의 DFS를 호출한 노드에게 최소 parent정보를 반환해야한다. 최소 parent를 리턴하고 함수를 종료한다.
위의 DFS를 모든 정점에 대해 실행한다. 단, visit된 노드는 이미 SCC처리가 된 상태이므로 방문하지 않는다.