μμμ λ ¬ μκ³ λ¦¬μ¦
-νλ₯Ό μ΄μ©
1. μ§μ μ°¨μκ° 0μΈ λͺ¨λ λ Έλλ₯Ό νμ λ£λλ€.
2. νκ° λΉ λκΉμ§ λ€μμ κ³Όμ μ λ°λ³΅νλ€.
1) νμμ μμλ₯Ό κΊΌλ΄ ν΄λΉ λ Έλμμ λκ°λ κ°μ μ κ·Έλνμμ μ κ±°νλ€.
2) μλ‘κ² μ§μ μ°¨μκ° 0μ΄ λ λ Έλλ₯Ό νμ λ£λλ€.
--> κ²°κ³Όμ μΌλ‘ κ° λ Έλκ° νμ λ€μ΄μ¨ μμκ° μμ μ λ ¬μ μνν κ²°κ³Όμ κ°λ€.
(νΉμ§)
- μ¬μ΄ν΄μ΄ μλ λ°©ν₯κ·Έλν(DAG)μ¬μΌ νλ€.
- ν λ¨κ³μμ νμ μλ‘κ² λ€μ΄κ°λ μμκ° 2κ° μ΄μμΈ κ²½μ°κ° μλ€λ©΄ μ¬λ¬κ°μ§ λ΅ μ‘΄μ¬.
- λͺ¨λ μμλ₯Ό λ°©λ¬ΈνκΈ° μ μ νκ° λΉλ€λ©΄ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ€κ³ νλ¨ν μ μμ
(μκ°λ³΅μ‘λ)
- μ°¨λ‘λλ‘ λͺ¨λ λ Έλλ₯Ό νμΈνλ©° κ° λ Έλμμ λκ°λ κ°μ μ μ°¨λ‘λλ‘ μ κ±°νλ―λ‘ μκ°λ³΅μ‘λλ O(V+E)μ΄λ€.
μμμ λ ¬ μ½λ
from collections import defaultdict, deque
def topologicalSort(graph, level,n):
queue = deque()
for i in range(1,n+1):
if level[i] == 0:
queue.append(i)
while queue:
v = queue.popleft()
print(v, end=' ')
for i in graph[v]:
level[i] -= 1
if level[i] == 0:
queue.append(i)
def main():
n, m = map(int, input().split())
graph = defaultdict(list)
level = defaultdict(int)
for i in range(m):
a, b = map(int,input().split())
graph[a].append(b)
level[b] += 1
topologicalSort(graph, level,n)
if __name__ == '__main__':
main()
'ALGORITHM' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¬λ£¨μ€μΉΌ / νλ¦Ό / λ€μ΅μ€νΈλΌ (0) | 2021.01.14 |
---|---|
νΈλ¦¬ κΉμ΄ ꡬνλ λ°©μ (0) | 2021.01.12 |
[BFS] λ°±μ€ 2178 λ¬Έμ νμ΄ (0) | 2020.10.26 |
[DFS/BFS] λ°±μ€ 1260 λ¬Έμ νμ΄ (0) | 2020.10.26 |
[μ΄μ§νμ] programmers μ κ΅ μ¬μ¬ λ¬Έμ νμ΄ (0) | 2020.10.11 |