-
위상정렬 (topological sorting)전공공부/알고리즘&자료구조 2020. 1. 26. 18:31728x90반응형
참고: https://gmlwjd9405.github.io/2018/08/27/algorithm-topological-sort.html
[알고리즘] 위상 정렬(Topological Sort)이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
위상 정렬(Topological Sort)을 이용한 기본적인 해결 방법
위상정렬 순서
1. 진입 차수가 0인 정점(즉, 들어오는 간선의 수가 0)을 선택
진입 차수가 0인 정점이 여러 개 존재할 경우 어느 정점을 선택해도 무방하다.
초기에 간선의 수가 0인 모든 정점을 큐에 삽입
2. 선택된 정점과 여기에 부속된 모든 간선을 삭제
선택된 정점을 큐에서 삭제
선택된 정점에 부속된 모든 간선에 대해 간선의 수를 감소
3. 위의 과정을 반복해서 모든 정점이 선택, 삭제되면 알고리즘 종료위상정렬 예제
백준 2252:줄 세우기 https://www.acmicpc.net/problem/2252
2252번: 줄 세우기
첫째 줄에 N(1≤N≤32,000), M(1≤M≤100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이다. 학생들의 번호는 1번부터 N번이다.
www.acmicpc.net
소스코드
백준 1516: 게임 개발https://www.acmicpc.net/problem/1516
1516번: 게임 개발
첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부터 N까지로 하고, 각 줄은 -1로 끝난다고 하자. 각 건물을 짓는데 걸리는 시간은 100,000보다 작거나 같은 자연수이다.
www.acmicpc.net
핵심: 해당 노드로 가는데 드는 비용은 계속해서 갱신(최댓값으로, 왜냐하면 최소한 그 시간이 지나야 새로운 건물을 지을 수 있기 때문 )하다가 q에 push하는 과정은 진입차수(degree)가 0이 될 때 push하면 된다.
소스코드
728x90반응형'전공공부 > 알고리즘&자료구조' 카테고리의 다른 글
최소공통조상 (LCA, Lowest Common Ancestor) (0) 2020.01.26 Union-Find, 최소신장 트리 (MST, Minimum Spanning Tree) (0) 2020.01.26 순열과 조합 (0) 2020.01.12 확장 유클리드 호제법 (0) 2020.01.12 트라이 (Trie) (0) 2020.01.12