1. DFS μκ³ λ¦¬μ¦μ κ°λ κ³Ό μλ λ°©μ
DFS (Depth First Search) μκ³ λ¦¬μ¦μ κ·Έλνλ₯Ό νμνλ λ°©λ² μ€ νλλ‘, νμ¬ μ μ μμ λ μ΄μ κ° μ μλ μ μ μ΄ μμ λκΉμ§ κΉμ΄ μ°μ μΌλ‘ νμνμ¬ λͺ¨λ μ μ μ λ°©λ¬Ένλ μκ³ λ¦¬μ¦μ λλ€. DFSλ μ€ν λλ μ¬κ· ν¨μλ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μμ΅λλ€.
DFS μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°μ μλ λ°©μμ κ°μ΅λλ€:
- μμ μ μ μ λ°©λ¬Ένκ³ , ν΄λΉ μ μ μ μ€νμ λ£μ΅λλ€.
- μ€νμ΄ λΉμ΄ μμ§ μμ λμ λ€μμ λ°λ³΅ν©λλ€:
- μ€νμ κ°μ₯ μμ μλ μ μ μ κΊΌλ΄μ΄ νμ¬ μ μ μΌλ‘ μ€μ ν©λλ€.
- νμ¬ μ μ κ³Ό μΈμ ν μ μ μ€ μμ§ λ°©λ¬Ένμ§ μμ μ μ μ΄ μλ€λ©΄, ν΄λΉ μ μ μ λ°©λ¬Ένκ³ μ€νμ λ£μ΅λλ€.
- λͺ¨λ μΈμ ν μ μ μ λ°©λ¬Έν κ²½μ°, μ€νμμ νμ¬ μ μ μ μμ ν©λλ€.
- μ€νμ΄ λΉμ΄μμΌλ©΄ λͺ¨λ μ μ μ λ°©λ¬Έν κ²μ λλ€.
DFS μκ³ λ¦¬μ¦μ μ€νμ μ΄μ©νκΈ° λλ¬Έμ, κ°μ₯ λ§μ§λ§μ λ£μ μ μ μ λ¨Όμ μ²λ¦¬νλ―λ‘ κΉμ΄ μ°μ μΌλ‘ νμνλ νΉμ§μ κ°μ§κ² λ©λλ€. μ΄λ¬ν νμ λ°©μμΌλ‘ μΈν΄, ν μ μ μμ μΈμ ν μ μ μΌλ‘ μ΅λν κΉκ² νμνκ² λ©λλ€.
2. DFS μκ³ λ¦¬μ¦μ μμ© μ¬λ‘
DFS μκ³ λ¦¬μ¦μ κ·Έλν νμμ μ£Όλ‘ μ¬μ©λλ©°, λ€μν μμ© μ¬λ‘κ° μμ΅λλ€. λͺ κ°μ§ λνμ μΈ μμ© μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
κ·Έλν μν: DFSλ κ·Έλνμ λͺ¨λ μ μ μ νμνλλ° μ¬μ©λ©λλ€. κ·Έλνκ° μ°κ²°λμ΄ μμ λ, DFSλ₯Ό μ¬μ©νμ¬ λͺ¨λ μ μ μ λ°©λ¬Ένκ³ μ°κ²°λ λͺ¨λ κ²½λ‘λ₯Ό νμν μ μμ΅λλ€.
λ―Έλ‘ μ°ΎκΈ°: DFS μκ³ λ¦¬μ¦μ λ―Έλ‘μμ κ°μ₯ λΉ λ₯Έ κ²½λ‘λ₯Ό μ°Ύλλ° μ¬μ©λ μ μμ΅λλ€. μμμ λΆν° DFSλ₯Ό μ΄μ©ν΄ κ° μ μλ κ²½λ‘λ₯Ό νμνλ€κ° λμ°©μ μ λλ¬νλ©΄ νμμ μ’ λ£νκ³ μ΅λ¨ κ²½λ‘λ₯Ό μ»μ μ μμ΅λλ€.
μλ‘ μ°κ²°λ κ΅¬μ± μμ μ°ΎκΈ°: κ·Έλνμμ μλ‘ μ°κ²°λ κ΅¬μ± μμλ₯Ό μ°Ύλλ° DFSλ₯Ό μ¬μ©ν μ μμ΅λλ€. μμμ μμ DFSλ₯Ό μννμ¬ ν΄λΉ κ΅¬μ± μμμ μνλ λͺ¨λ μ μ μ λ°©λ¬Έν μ μμ΅λλ€.
μμ μ λ ¬: DFS μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ λ°©ν₯ κ·Έλνμ μ μ λ€μ μμ μμλ‘ λμ΄νλ μμ μ λ ¬μ ꡬνν μ μμ΅λλ€. μ΄λ₯Ό νμ©νμ¬ μ°μ μμ μμ μ μ€ν μμλ₯Ό κ²°μ ν μ μμ΅λλ€.
μ¬μ΄ν΄ νμ§: DFSλ₯Ό μ¬μ©νμ¬ κ·Έλνμμ μ¬μ΄ν΄μ νμ§ν μ μμ΅λλ€. μ μ μ λ°©λ¬Ένλ κ³Όμ μμ μ΄λ―Έ λ°©λ¬Έν μ μ μ λ§λλ©΄ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ κ²μΌλ‘ νλ¨ν μ μμ΅λλ€. μ¬μ΄ν΄μ νμ§νλ κ²μ κ·Έλνμ μ ν¨μ±μ κ²μ¬νλλ° μ μ©ν©λλ€.
μ΄ μΈμλ DFSλ κ·Έλν λ¬Έμ λΏλ§ μλλΌ λ―Έλ‘ κ²μ, μ¬κ·μ μΈ λ¬Έμ ν΄κ²° λ± λ€μν μκ³ λ¦¬μ¦ λ¬Έμ μμ νμ©λ μ μμ΅λλ€. DFSλ κ·Έλν ꡬ쑰μ λ°λΌ κΉμ΄ μ°μ μΌλ‘ νμνλ νΉμ§μ κ°μ§κ³ μκΈ° λλ¬Έμ, νμ λ¬Έμ λΏλ§ μλλΌ μ¬λ¬ μ’ λ₯μ λ¬Έμ μ μ μ©ν μ μμ΅λλ€.
3. DFS μκ³ λ¦¬μ¦μ μ₯λ¨μ
DFS μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°μ μ₯μ κ³Ό λ¨μ μ κ°μ΅λλ€.
μ₯μ :
ꡬνμ΄ κ°λ¨νλ©°, μ€ν λλ μ¬κ· ν¨μλ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μμ΅λλ€. μ΄λ‘ μΈν΄ μ½λκ° κ°κ²°νκ³ μ§κ΄μ μ λλ€.
κΉμ΄ μ°μ νμμ΄κΈ° λλ¬Έμ, μμμ μΌλ‘λΆν° μ΅λν κΉκ² νμνκΈ° λλ¬Έμ κ°λ₯ν λΉ λ₯΄κ² ν΄λ΅μ λλ¬ν μ μμ΅λλ€. λ°λΌμ, μ΅λ¨ κ²½λ‘ μ°ΎκΈ°μ κ°μ λ¬Έμ μ μ ν©ν©λλ€.
λ¨μ :
κ·Έλνκ° λ¬΄νν κΉμ΄μ§ μ μλ κ²½μ°, νμμ΄ λλμ§ μμ μ μμ΅λλ€. λ°λΌμ, λ©λͺ¨λ¦¬ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
BFSλ³΄λ€ νΉμ κ²½λ‘λ₯Ό μ°ΎκΈ° μ΄λ €μΈ μ μμ΅λλ€. DFSλ ν λ²μ νλμ κ²½λ‘λ₯Ό νμνκΈ° λλ¬Έμ, λ΅μ΄ λ μ μλ λͺ¨λ κ²½λ‘λ₯Ό νμνκΈ° μν΄ μ 체 κ·Έλνλ₯Ό νμν΄μΌ ν μλ μμ΅λλ€.
DFSλ λ°±νΈλνΉμ μ¬μ©νλ κ²½μ°μ ν¨κ³Όμ μ΄μ§λ§, μ΅μ ν λ¬Έμ μλ μ ν©νμ§ μμ μ μμ΅λλ€. μ΅μ ν λ¬Έμ μμλ λͺ¨λ κ°λ₯ν κ²½λ‘λ₯Ό νμνλ λμ νΉμ κΈ°μ€μ λ°λΌ κ°μ₯ μ’μ κ²½λ‘λ₯Ό μ ννλ κ²μ΄ μ€μν©λλ€.
DFSλ κΉμ΄ μ°μ μΌλ‘ νμνκΈ° λλ¬Έμ, λμΌν μ μ μ λ°λ³΅ν΄μ λ°©λ¬Έν μ μμ΅λλ€. μ΄λ¬ν λ°λ³΅ λ°©λ¬Έμ λ°©μ§νκΈ° μν΄ λ°©λ¬Έν μ μ μ 체ν¬νλ κ²μ΄ νμν©λλ€.
DFSλ ꡬνμ΄ κ°λ¨νκ³ , μ΅λ¨ κ²½λ‘ μ°ΎκΈ° λ± κΉμ΄ μ°μ νμμ μ ν©ν λ¬Έμ μμ ν¨κ³Όμ μ λλ€. κ·Έλ¬λ 무ν κΉμ΄μ κ·Έλνμ κ°μ΄ νμμ΄ λλμ§ μμ μ μλ κ²½μ°λ μ΅μ ν λ¬Έμ μλ μ νμ μΌ μ μμ΅λλ€. μ΄λ¬ν μ₯λ¨μ μ κ³ λ €νμ¬ DFS μκ³ λ¦¬μ¦μ μ ν©ν λ¬Έμ μ μ μ©ν΄μΌ ν©λλ€.
4. DFS μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λμ κ³΅κ° λ³΅μ‘λ
DFS μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λμ κ³΅κ° λ³΅μ‘λλ λ€μκ³Ό κ°μ΅λλ€.
μκ° λ³΅μ‘λ:
DFSλ κ·Έλνμ λͺ¨λ μ μ μ ν λ²μ© λ°©λ¬Ένλλ° μκ°μ΄ 걸립λλ€. λ°λΌμ, κ·Έλνμ λͺ¨λ μ μ μ νμνκΈ° μν μκ° λ³΅μ‘λλ O(V) μ λλ€. μ¬κΈ°μ Vλ μ μ μ κ°μμ λλ€.
λν, DFSλ κ° μ μ μμ μΈμ ν λͺ¨λ μ μ μ λ°©λ¬ΈνκΈ° μν΄ μΈμ ν κ°μ μ λͺ¨λ νμν©λλ€. λ°λΌμ, μΈμ ν μ μ μ νμνλλ° κ±Έλ¦¬λ μκ°μ ν΄λΉ μ μ μ μ°¨μμ λΉλ‘ν©λλ€. λ§μ½, κ·Έλνκ° μΈμ 리μ€νΈλ‘ ννλμ΄ μλ€λ©΄, κ° μ μ μμ μΈμ ν μ μ μ νμνλλ° O(1)μ μκ°μ΄ 걸리며, κ·Έλνμ λͺ¨λ κ°μ μ νμν΄μΌ νλ―λ‘ O(E)μ μκ°μ΄ μμλ©λλ€. μ¬κΈ°μ Eλ κ°μ μ κ°μμ λλ€.
λ°λΌμ, DFS μκ³ λ¦¬μ¦μ μ΅μ’ μκ° λ³΅μ‘λλ O(V + E)μ λλ€.
κ³΅κ° λ³΅μ‘λ:
DFS μκ³ λ¦¬μ¦μμ μ¬μ©λλ κ°μ₯ μ€μν μλ£ κ΅¬μ‘°λ μ€ν λλ μ¬κ· ν¨μμ νΈμΆ μ€νμ λλ€. DFSλ μμ μ μ λΆν° νμμ μμνκ³ , μΈμ ν μ μ μ κ³μν΄μ μ€νμ μΆκ°νλ©΄μ νμμ μ§νν©λλ€. λ°λΌμ, μ€νμλ μ΅μ μ κ²½μ° μ μ μ κ°μλ§νΌμ μμκ° μ μ₯λ μ μμ΅λλ€. μ΄λ κ·Έλνμ κΉμ΄μ λ°λΌ λ¬λΌμ§λ©°, μ΅μ μ κ²½μ° λ¬΄νν κΉμ΄μ§λ€λ©΄ μ€νμ ν¬κΈ°λ 무νν μ»€μ§ μ μμ΅λλ€.
λν, DFSλ λ°©λ¬Έ μ¬λΆλ₯Ό 체ν¬νκΈ° μν λ°°μ΄μ΄λ 리μ€νΈλ₯Ό μ¬μ©ν©λλ€. μ΄ λ°°μ΄μ κ·Έλνμ μ μ κ°μμ λΉλ‘νλ©°, λͺ¨λ μ μ μ λ°©λ¬Ένκ³ μ²΄ν¬νκΈ° μν΄μλ O(V)μ 곡κ°μ΄ νμν©λλ€.
λ°λΌμ, DFS μκ³ λ¦¬μ¦μ μ΅μ’ κ³΅κ° λ³΅μ‘λλ O(V)μ λλ€. λ€λ§, μ΅μ μ κ²½μ° μ€νμ΄ λ¬΄νν 컀μ§λ€λ©΄ κ³΅κ° λ³΅μ‘λλ O(β)μ΄ λ μ μμ΅λλ€.
5. DFS μκ³ λ¦¬μ¦μ ꡬν λ°©λ²κ³Ό μ£Όμ μ½λ μμ
DFS μκ³ λ¦¬μ¦μ μ€ν λλ μ¬κ· ν¨μλ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μμ΅λλ€. μ¬κΈ°μλ μ¬κ· ν¨μλ₯Ό μ΄μ©ν ꡬν λ°©λ²μ λν΄ μ€λͺ νκ³ , μ£Όμ μ½λ μμλ₯Ό μ μνκ² μ΅λλ€.
μ¬κ· ν¨μλ₯Ό μ΄μ©ν ꡬν λ°©λ²:
μμ μ μ μ λ°©λ¬Ένκ³ , λ°©λ¬Έν μ μ μ 체ν¬ν©λλ€.
νμ¬ μ μ κ³Ό μΈμ ν μ μ μ€μμ λ°©λ¬Ένμ§ μμ μ μ μ μ¬κ·μ μΌλ‘ νμν©λλ€. μ΄λ, νμν μ μ μ λ°©λ¬Έν μ μ μΌλ‘ 체ν¬ν©λλ€.
λͺ¨λ μΈμ ν μ μ μ νμν νμλ λ°±νΈλνΉμ μνν©λλ€. μ¦, νμ¬ μ μ μ νμμ μ’ λ£νκ³ μ΄μ μ μ μΌλ‘ λμκ°λλ€.
μμ μ μ μΌλ‘λΆν° νμμ μμνμ¬ λͺ¨λ μ μ μ λ°©λ¬Έν λκΉμ§ 2-3λ¨κ³λ₯Ό λ°λ³΅ν©λλ€.
μ£Όμ μ½λ μμ:
λ€μμ μ¬κ· ν¨μλ₯Ό μ΄μ©ν DFS μκ³ λ¦¬μ¦μ μ£Όμ μ½λ μμμ λλ€. μ΄ μμμμλ μΈμ 리μ€νΈλ‘ ννλ κ·Έλνλ₯Ό κΈ°μ€μΌλ‘ μ€λͺ ν©λλ€.
def dfs(vertex, visited, graph):
# νμ¬ μ μ λ°©λ¬Έ
visited[vertex] = True
print(vertex, end=' ')
# νμ¬ μ μ κ³Ό μΈμ ν μ μ λ€μ λν΄ μ¬κ· νΈμΆ
for adjacent_vertex in graph[vertex]:
if not visited[adjacent_vertex]:
dfs(adjacent_vertex, visited, graph)
# κ·Έλν μ 보
graph = {
1: [2, 3],
2: [1, 4, 5],
3: [1, 6, 7],
4: [2],
5: [2],
6: [3],
7: [3]
}
# μ μ μ κ°μ
num_vertices = len(graph)
# λ°©λ¬Έ μ¬λΆλ₯Ό 체ν¬νκΈ° μν λ°°μ΄
visited = [False] * (num_vertices + 1)
# DFS νΈμΆ
dfs(1, visited, graph)
μμ μ½λ μμμμλ dfs
ν¨μλ₯Ό μ μνμ¬ DFS μκ³ λ¦¬μ¦μ ꡬννμμ΅λλ€.
- 첫 λ²μ§Έ μΈμμΈ
vertex
λ νμ¬ νμνλ μ μ μ μλ―Έν©λλ€. - λ λ²μ§Έ μΈμμΈ
visited
λ λ°©λ¬Έ μ¬λΆλ₯Ό 체ν¬νκΈ° μν λ°°μ΄λ‘, μ μ μ κ°μλ³΄λ€ νλ λ ν¬κ² ν λΉν©λλ€. - μΈ λ²μ§Έ μΈμμΈ
graph
λ μΈμ 리μ€νΈ ννμ κ·Έλν μ 보λ₯Ό λνλ λλ€.
dfs
ν¨μμμλ νμ¬ μ μ μ λ°©λ¬Ένκ³ μ²΄ν¬ν λ€, μΈμ ν μ μ μ μ¬κ·μ μΌλ‘ νμν©λλ€. μ΄λ, λ°©λ¬Ένμ§ μμ μ μ μ λν΄μλ§ νμμ μ§νν©λλ€. κ·Έλ¦¬κ³ κ° μ μ μ νμν νμλ λ°±νΈλνΉμ μννμ¬ μ΄μ μ μ μΌλ‘ λμκ°λλ€.
μμ μ½λ μμλ₯Ό μ€ννλ©΄, μμ μ μ μμλΆν° DFS νμμ μμνμ¬ κ·Έλνμ λͺ¨λ μ μ μ λ°©λ¬Ένλ μμλλ‘ μΆλ ₯λ©λλ€.
λκΈ