[1. 개요]
사이클이 없는 연결 그래프에서 위상 정렬이 가능하다.
- Cycle 이 있다면 위상 정렬을 할 수 없다.
DFS 로 구현하는 방법과 BFS 로 구현하는 방법이 있지만,
보통 BFS 로 구현하는 편이 좀 더 쉬운 것 같음
- BFS 방식의 위상 정렬 구현 패턴을 정하도록 한다.
구현 상 그 차이점을 단순하게 정리하면 아래와 같다.
DFS 로 구현
- DFS 이므로 재귀로 구현
- 가장 먼저 방문 하는 것이 제일 첫번째로 해야 할 작업이며,
- 가장 마지막에 방문하는 것이 마지막으로 해야 할 작업이라 볼 수 있음
- 방문 순서는 vector 에 push_back() 으로 저장 시, vector 를 reverse 해야 함
=> 혹은 reverse iterator 를 통해.
BFS 로 구현
- 재귀로 구현 할 필요 없음
- 노드 u 의 incoming edge 개수를 파악 할 자료구조가 필요.
- 좀 더 복잡한 조건을 작성하기에 DFS 보다 유리하다 생각함.
- incoming edge 가 0 인 경우에서 빼는 경우를 만들지 않도록 할 것.
- incoming edge 개수를 빼고 나면 항상 0 이 되는지 확인 할 것.
- 0이 되면 다음에 진행 할 작업이 되는 것이므로,,
문제에서 동시에 작업을 진행한다고 명시되어 있는 경우
- 각 작업이 끝나는 시점을 파악 하고,
=> 순차적인 코드 작성이 가능.. - 전체 작업 중 가장 마지막에 끝나는 작업에 대한 처리를 한다.
[2. 예제
'알고리즘 > 분류' 카테고리의 다른 글
SCC 관련 솔루션 (0) | 2022.12.29 |
---|---|
최소 공통 조상 솔루션 (0) | 2022.12.28 |
최소신장트리 솔루션 (0) | 2022.12.26 |
플로이드-워셜 솔루션 (0) | 2022.12.25 |
최단 경로(벨만-포드) 문제 솔루션 (0) | 2022.12.24 |