λ°μν
π κΉμ΄ μ°μ νμ(DFS) μ΄λ
- κΉμ΄λ₯Ό μ°μ μΌλ‘ νμ¬ νμμ μννλ μκ³ λ¦¬μ¦
- νΉμ λ Έλμμ μμν΄μ λ€μ λΆκΈ°λ‘ λμ΄κ°κΈ° μ μ ν΄λΉ λΆκΈ°λ₯Ό μλ²½νκ² νμνλ λ°©λ²!
- ex) λ―Έλ‘νμ - λ§ν λ κΉμ§ κ³μ κ°λ€κ° λ§λ€λ₯Έ κΈΈμ΄ λμ€λ©΄ κ°μ₯ μ΅κ·Όμ κ°λ¦ΌκΈΈλ‘ λμκ° λ€μ κΈΈμ μ°Ύλ κ²!
- κ²½λ‘λ₯Ό μ°Ύκ³ μΆμ λ
- μ€νμ κ·Έλνλ‘ ν΄κ²°νλ€. ( μ¬κ·ν¨μλ₯Ό μ¨λ λ¨ )
μ€νμΌλ‘ μ¬μ©μ μ΄μ μ€ κ°μ₯ λ€μ μλ κ²λΆν°,
μ¬κ· μ¬μ©μ μ΄μ μ€ κ°μ₯ μμ μλ κ²λΆν° νμνλ€.
π κΉμ΄ μ°μ νμ(DFS) ꡬν
def dfs(c):
print(c, end=' ')
for neighbor in adj[c]: # cμ μ΄μ μ€
if visited[neighbor] == 0: # λ°©λ¬Έ μμ§ μν μΉκ΅¬μ΄λ©΄
visited[neighbor] = 1
dfs(neighbor)
# μΈμ 리μ€νΈ
# λ
Έλ: 1,2,3,4,5,6,7
n = 10
adj = {x: [] for x in range(1, n + 1)}
edges = [
[1, 2],
[1, 5],
[1, 9],
[2, 3],
[3, 4],
[5, 6],
[5, 8],
[6, 7],
[9, 10]
]
# 무방ν₯ κ·Έλνμ΄λ―λ‘ λ°λμͺ½λ μ±λ¦½
for edge in edges:
s, e = edge
adj[s].append(e)
adj[e].append(s)
print(adj)
# 1λΆν° νμ
k = 1
visited = [0] * (n + 1)
visited[k] = 1
print('λ°©λ¬Έ μμ')
dfs(k)
λ°μν
'CS > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ν¬λ£¨μ€μΉΌ μκ³ λ¦¬μ¦(kruskal) (0) | 2020.09.30 |
---|---|
μλ‘μ μ§ν©(Disjoint-set) (0) | 2020.09.29 |
λλΉ μ°μ νμ(Breath First Search, BFS) (0) | 2020.09.27 |
κ³μ μ λ ¬(counting sort) (0) | 2020.09.26 |
λ³ν© μ λ ¬(merge sort) (0) | 2020.09.25 |