코딩테스트/C++
위상 정렬 (topology sort)
최-코드
2024. 3. 11. 20:35
가장 처음에 할 것은 자신을 가리키는 노드의 개수를 구하는 것이다. 왜냐하면 자신을 가리키는 노드가 없으면, 즉 진입 차수가 0이면 가장 먼저 끝내야 하는 일이기 때문이다.
따라서 각각 노드마다 진입차수를 구했다면 queue를 이용해 순서를 저장할 건데, 진입 차수가 0인 노드를 queue에 넣고, queue에서 뺄 때 이를 결과 vector에 저장해 놓는다. 이후 queue에서 뺀 값에 대해 이 노드가 가리키는 노드들의 진입차수를 1씩 빼주고 만약 진입 차수가 0이 된 노드가 있으면 이를 다시 queue에 넣는다. 이를 반복하면서 queue가 빌 때까지 진행하면 결과 vector에는 노드들의 순서가 정렬되어 있을 것이다.