608 위상정렬
| source | |
| type | 📌 개발노트 |
| parent_topic | 600-알고리즘 & 코딩테스트 |
| types | 이론 |
| tags |
방향 그래프의 노드를 방향성에 거스르지 않고 순서대로 나열하는 것
예시 : Like 커리큘럼
- 진입차수가 0인 노드를 큐에 넣는다
- 큐가 빌때까지
- 큐에서 원소를 커내 해당노드에서 출발하는 간선을 제거한다.
- 새롭게 진입차수가 0이 된 노드를 큐에 넣는다.
from collections import deque
# <span id="v-는-노드개수"></span>v 는 노드개수
# <span id="graphnodeappend연결된노드"></span>graph[node].append(연결된노드)
inde = [0] * (v+1) # 노드에 대한 진입차수
def topology_sort():
result = []
q = deque()
# 진입차수가 0인거 큐에 삽입
for i in range(1,n+1):
if inde[i] == 0:
q.append(i)
while q:
now = q.popleft()
result.append(now)
#now 에서 출발한 간선에 대해서 진입차수 제거
for i in graph[now]:
inde[i] -= 1
if inde[i] == 0:
q.append(i)