https://www.acmicpc.net/problem/2252
2252번: 줄 세우기
첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의
www.acmicpc.net
import sys
from collections import deque
n, m = map(int,sys.stdin.readline().split())
indegree = [0] * (n+1)
graph = [[] for i in range(n+1)]
for _ in range(m):
a, b = map(int,sys.stdin.readline().split())
graph[a].append(b)
indegree[b] += 1
def topology_sort():
result = []
q = deque()
for i in range(1,n+1):
if indegree[i] == 0:
q.append(i)
while q:
now = q.popleft()
result.append(now)
for i in graph[now]:
indegree[i] -= 1
if indegree[i] == 0:
q.append(i)
for i in result:
print(i,end = ' ')
topology_sort()
위상정렬의 대표적인 예이다.
꼭 숙지해두자
https://zoozoozoo.tistory.com/411
위상 정렬
위상 정렬은 정렬 알고리즘의 일종이다. 위상 정렬은 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다. 조금 더 이론적으로 설명하자면, 위상 정렬이
zoozoozoo.tistory.com
반응형
'알고리즘 공부 > 위상정렬' 카테고리의 다른 글
[백준] 1766번 문제집 - 파이썬 (0) | 2022.04.13 |
---|---|
위상 정렬 (0) | 2022.04.12 |