DAG에는 indegree가 0인 게 적어도 하나 존재한다.
그래야 Cycle이 없을 수 있기 때문이다.
v는 indegree가 없고, 모든 엣지는 왼쪽에서 오른쪽으로 향하도록 정렬했으므로 뒤 순서의 노드 중 v로 향하는 엣지를 가진 노드는 없을 것이기 때문이다.
Event Queue를 사용하면 더 빠르게 할 수 있다.
- indegree를 계산한다.
- indegree가 0인 것들을 Queue에 넣는다.
- Queue로부터 v를 꺼낸다.
- v와 연결된 노드들의 indegree를 -1 해준다.
- 이후 다시 indegree가 0이 된 노드들을 Queue에 넣는다.
노드 v를 지웠을 때 indegree가 0이 될 수 있는 애들은 v와 연결되어 있었던 노드들 뿐임을 이용하여 Event Queue를 적용할 수 있었나보다.
조금 더 빠른 방법은 DFS와 Post Number를 이용하는 것이다.
- DFS를 진행한다.
- 노드에 Post Number를 붙인다.
- 내림차순으로 PostNumber를 출력한다. (Sort 필요)
또는 Post 번호를 계산하면서 출력해도 되는데 거꾸로 출력하게 된다.
3번의 결과는 위상정렬의 결과와 같다.